Translate

tutorial pointer halaman 3

tutorial pointer halaman 3

Selamat datang di eagleboot dan selamat membaca.

terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam :  terry[4] = '!'; *(terry+4) = '!';  Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan:  ‘h’ ‘e’‘l’‘l’‘!’‘\0’  1702 17031704170517061707    terry 1702  terry[4]   *(terry+4)   Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi !  Perhatikan contoh program dibawah, dimana char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer :  char*mychar; short*myshort; long*mylong;  ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan :  mychar++;myshort++;mylong++;  mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes 

Perhatikan ekspresi dibawah ini :  *p++;*p++=*q++;  Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya).  Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain :  *p=*q;p++;q++;  Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya. 

 Program 13.3 include<iostream.h> usingnamespacestd; voidincrease(void*data,inttype) { switch(type) { casesizeof(char):(*((char*)data))++;break; casesizeof(short):(*((short*)data))++;break; casesizeof(long):(*((long*)data))++;break; } } intmain() { chara=5; shortb=9; longc=12; increase(&a,sizeof(a)); increase(&b,sizeof(b)); increase(&c,sizeof(c)); cout<<(int)a<<","<<b<<","<<c; return0; } 

 Keluaran program diatas adalah sebagai berikut: 6,10,13 

Next read halaman 4.
tutorial pointer halaman 3

tutorial pointer halaman 3

Selamat datang di eagleboot dan selamat membaca.

terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam :  terry[4] = '!'; *(terry+4) = '!';  Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan:  ‘h’ ‘e’‘l’‘l’‘!’‘\0’  1702 17031704170517061707    terry 1702  terry[4]   *(terry+4)   Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi !  Perhatikan contoh program dibawah, dimana char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer :  char*mychar; short*myshort; long*mylong;  ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan :  mychar++;myshort++;mylong++;  mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes 

Perhatikan ekspresi dibawah ini :  *p++;*p++=*q++;  Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya).  Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain :  *p=*q;p++;q++;  Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya. 

 Program 13.3 include<iostream.h> usingnamespacestd; voidincrease(void*data,inttype) { switch(type) { casesizeof(char):(*((char*)data))++;break; casesizeof(short):(*((short*)data))++;break; casesizeof(long):(*((long*)data))++;break; } } intmain() { chara=5; shortb=9; longc=12; increase(&a,sizeof(a)); increase(&b,sizeof(b)); increase(&c,sizeof(c)); cout<<(int)a<<","<<b<<","<<c; return0; } 

 Keluaran program diatas adalah sebagai berikut: 6,10,13 

Next read halaman 4.
tutorial pointer halaman 2

tutorial pointer halaman 2

Selamat datang di eagleboot dan selamat membaca.

Gambar 13.2. Operator Alamat (&)  Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :  beth=*ted;  (dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25. 


Ekspresi dibawah ini semuanya benar, perhatikan pernyataan program dibawah:  andy==25 &andy==1776 ted==1776 *ted==25  Ekspresi pertama merupakan assignation bahwa andy=25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :  *ted==andy  

13.2. Deklarasi variabel bertipe pointer 

 Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variable pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini.
Gambar 13.4. Variabel pointer px menunjuk ke variabel x  Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :   
  Gambar 13.7. deklarasi variabel pointer  Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer- nya. Dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_var_pointer adalah nama dari variabel pointer. Perhatikan contoh berikut ini: int*px; char*pch1,*pch2; float*greatnumber;  Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.  1000 ? X px zzzz 1000 Alamat  tipe_data *nama_var_pointer char, float, int, double, long, operator bintang/ asterisk (*



13.3. Inisialisasi Pointer  Dalam melakukan pemrogaman dengan menggunakan pointer yang pertama perlu dilakukan dalam membuat program adalah dengan melakukan inisialisasi pointer tersebut. Untuk lebih jelasnya perhatikan contoh dibawah ini:  intnumber;int*tommy=&number;  pernyataan diatas akan sama atau ekivalen dengan pernyataan dibawah ini:  intnumber;int*tommy;tommy= &number;  Seperti pada array, inisialisasi isi dari pointer dapat dilakukan dengan deklarasi seperti contoh berikut :  char*terry="hello";  Misalkan kata "hello" disimpan pada alamat 1702 dan seterusnya, maka deklarasi tadi dapat digambarkan sebagai berikut:

Next read halaman 3.
tutorial pointer  lengkap

tutorial pointer lengkap

Selamat datang di eagleboot dan selamat membaca.

BAB 13 POINTER  

13.1 Pemrograman pointer 
13.2 Deklarasi variabel bertipe pointer  
13.3 Inisialisasi Pointer  
13.4 Pointer untuk fungsi  
13.5 Mengakses dan Mengubah isi Pointer  
13.6 Array dan Pointer
 13.7 Pointer dalam Fungsi  
13.8 Fungsi Pointer ke Static Class Member Function  
13.9 Fungsi Pointer pada Class anggota Fungsi Non-static.

13.1. Pemrograman pointer

 Pada programmer pemula hal yang sulit dipahami adalah pointer. Pointer adalah pada dasarnya sama dengan veriabel lain. Dengan pointer setiap variable diletakan pada alamat memori yang besarnya cukup untuk menampung nilai dari sebuah variable tipe data. Pada sebuah komputer PC misalnya satu byte data secara umum dialokasikan untuk tipe data char, 2 byte untuk tipe data short, 4 byte untuk tipa data int, long dan float serta 8 byte untuk tipe data double. Tiap-tiap byte data memori mempunyai alamat yang unik. Sebuah variable alamat  merupakan alamat dimana sebuah byte data pertama dapat dialokasikan. Sebagai contoh misalnya dapat didefinisikan dalam program sebagai berikut; charhuruf; shortangka; floatamount;  sehingga pengaturan memorinya dapat diilustrasikan sebagai berikut 


Pada gambar diatas variable letter diletakan pada alamat 1200, number pada alamat 1201 dan amount pada alamat 1203. Ketika programmer mendeklarasikan sebuah variable, sama halnya dengan menginformasikan compiler dua sesuatu yaitu : nama variable dan tipe variable. Misalnya kita akan mendeklarasikan tipe variable integer dengan nama variable k sehingga dapat ditulis: Intk  Pada tipe variable integer merupakan tipe data yang digunakan compiler dimana memori yang terpakai adalah dua byte. Setiap kali komputer menyimpan data, maka sistem operasi akan mengorganisasikan lokasi pada memori pada alamat yang unik. Misal untuk alamat memori 1776, hanya sebuah lokasi yang memiliki alamat tersebut. Dan alamat 1776 pasti terletak antara 1775 dan 1777. Dalam pointer, terdapat 2 jenis operator yang biasa digunakan. Kegunaan pointer yang utama adalah untuk menyimpan alamat memori dari sebuah variabel (data type atau object dari class). Selain menyimpan alamat dari variabel, pointer juga dapat digunakan untuk menyimpan alamat dari sebuah fungsi (function pointer).  Function pointer telah digunakan sejak dikenalkannya bahasa C, dan banyak digunakan untuk sebuah fungsi callback atau untuk meningkatkan readability dari sebuah code  Anda dapat memperlakukan function pointer seperti pointer biasa (pointer ke datatype/object), anda dapat menyimpan,mengirimkan, merubah address, atau meng- evaluasi address dari pointer ke fungsi ini dengan sifat tambahan anda dapat memanggil fungsi yang ditunjuk oleh function pointer.  Setiap variabel yang dideklarasikan, disimpan dalam sebuah lokasi memori dan pengguna biasanya tidak mengetahui di alamat mana data tersebut disimpan. Dalam C++, untuk mengetahui alamat tempat penyimpanan data, dapat digunakan tanda ampersand (&) yang dapat diartikan “alamat”. Sebenarnya jika programer akan mendeklarasian sebuah variable, seorang programer tidak diharuskan menentukan lokasi sesungguhnya pada memory, karena hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time.  Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Perhatikan contoh dibawah ini:  ted=&andy;  Akan memberikan variable ted alamat dari variable andy, karena variable andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sebagai berikut :  andy=25; fred=andy; ted=&andy;  Maka hasilnya adalah sebagai berikut:   andy  25  177517761777   Fred  Ted  25  1776   

Next read halaman 2.
tutorial operasi file halaman 17

tutorial operasi file halaman 17

Selamat datang di eagleboot dan selamat membaca.

lama). Caranya adalah dengan menambahkan perintah ios::app pada open(). nama_obyek.open(“namafile”,ios::app) 

 Program 12.12
 #include<iostream.h> #include<fstream.h> voidmain(){ ofstreamfileteks; fileteks.open("C:/catatan.txt",ios::app); fileteks<<endl; fileteks<<"Oleh:AlKhowarizmi<<endl; fileteks.close(); } 

 12.12.5. Memeriksa File

 Dalam penulisan tidak selamanya jalan yang mulus ditemui. Ada kemungkinan terjadi saat file dibuka, ternyata file tidak ada. Dalam C++ tersedia fungsi untuk memeriksa kondisi-kondisi pada operasi file, sehingga kesalahan saat eksekusi dapat dikendalikan. Fungsi yang dimaksud adalah fail().  
Program 12.13.
 #include<iostream.h> #include<fstream.h> voidmain(){ ifstreamfileteks; { ifstreamdigunakanu/membacafile } fileteks.open("C:/catatan.txt"); if(fileteks.fail())cout<<"Maaffiletakdapatdibuka/"<<"tidakditemukan"; fileteks.close(); }  
Operasi file dapat dilakukan dalam bentuk karakter. Misalnya proses penyimpanan data ke file dilakukan setiap karakter, atau membaca data file karakter per karakter. Operasi ini didukung oleh function put() dan get().

  Program 12.14. Menyimpan data karakter per karakter ke dalam file 
#include<iostream.h> #include<fstream.h> voidmain() { ofstreamfileteks; fileteks.open("C:/contoh.txt"); fileteks.put('A'); fileteks.put('B'); fileteks.put('C'); fileteks.close(); }  

Program 12.15. Program untuk membaca file karakter per karakter
 #include<iostream.h> #include<fstream.h> voidmain() { charkarakter; ifstreamfileteks;{} fileteks.open("C:/contoh.txt"); while(!fileteks.eof()) { fileteks.get(karakter); cout<<karakter; } fileteks.close(); }  

12.17. Soal Latihan 
Jawablah soal latihan dibawah ini dengan baik dan benar. 
 Buktikan bahwa anda telah membacanya. 

1. Apa yang dimaksud dengan file
 2. Apa yang dimaksud dengan kode ascii
 3. Apakah fungsi buffer pada operasi string 
4. Buatlah program untuk menulis file dengan nama latih.txt 
5. Buatlah program untuk menambah data pada file latih.txt
 6. Buatlah program untuk menghapus file latih.txt
 7. Apa yang dimaksud dengan file skuensial.

Next read BAB 13. POINTER 
tutorial operasi file halaman 16

tutorial operasi file halaman 16

Selamat datang di eagleboot dan selamat membaca.

}  b. fgets()danfputs(), Sintaknya dapat diltulis sebagai berikut:

 intfputs(char*str,FILE*fp); char*fgets(char*str,intnum,FILE*fp);  Program 12.8. #include<stdio.h> #include<stdlib.h> voidmain() { FILE*fp; charch[14]; fp=fopen("foo.abc","w");//bukafilefoo.abcuntukditulisi fputs("StringContoh",fp);//menuliskanstring fclose(fp); if((fp=fopen("foo.abc","r"))==NULL){ printf("Errorreadingfile...\n"); exit(1); } puts(fgets(ch,sizeof(ch),fp));//cetakstringdifookelayar fclose(fp); } 

 c. fscanf() dan fprintf() dimana operasi ini mempunyai ciri-ciri sebagai berikut: ? Mirip dengan sintaks scanf() dan  printf() ? Dapat digunakan untuk sembarang file (tidak hanya monitor/layar) ? Dapat menggunakan format data Sintaks adalah sebagai berikut: intfprintf(FILE*fp,constchar*format, …); int fscanf(FILE *fp, const char *format, …); 

 Program 12.9 #include<stdio.h> #include<stdlib.h> voidmain() { FILE*fp; inti; charx[100]; fp=fopen("foo.abc","w");//bukafilefoo.abcuntukditulisi fprintf(fp,"\nSampleCode\n\n");//menuliskansesuatu for(i=1;i<=10;i++){ fprintf(fp,"i=%d\n",i); } fclose(fp); if((fp=fopen("foo.abc","r"))==NULL){ printf("Errormembukafile\n"); exit(1); } while(!feof(fp)){ fscanf(fp,"%s",&x); puts(x); } fclose(fp); } 

 d. fread() dan fwrite() fungsi operasi ini antara lain:  ? Untuk membaca dan menulis blok data (misalnya: Karakter, integer, structure,dan lain-lain) ? Untuk dapat menggunakan fwrite(), file harus dibuka dengan tambahan opsi “b” (binary)  Sintaks:  fwrite(void *buffer, int b_byte, int c, file *fp); fread(void *buffer, int b_byte, int c, file *fp); 
 Keterangan: buffer: pointer ke area di memori yang menampung data yg akan dibaca ke file b_byte: banyaknya byte data yang akan dibaca/tulis (dapat menggunakan sizeof(buffer)) c: banyaknya blok data yang akan dibaca/ditulis fp: pointer ke file  

12.12.2. Menulis File

 Salah satu jenis pemrosesan pada file adalah menulis atau merekam data ke file. Untuk menulis sebuah karakter, bentuk yang digunakan adalah dengan menggunakan Sintak sebagai berikut: putc(intch,file*fp)  dimana  fp adalah pointer file yang dihasilkan oleh fopen()  ch adalah karakter yang akan ditulis.
 Program 12.10
 #include"stdio.h" #include"conio.h" #defineCTRL_Z26 voidmain(){ file*pf;/*pointerkefile*/ charkar; if((pf=fopen("COBA.TXT","w"))==NULL)/*ciptakanfile*/ {cputs("Filetakdapatdiciptakan!\r\n"); exit(1);/*selesai*/ } while((kar=getche())!=CTRL_Z) putc(kar,pf);/*tuliskefile*/ fclose(pf);/*tutupfile*/ } 

 12.12.3. Menutup File 

Setelah pemrosesan file selesai, file dapat ditutup menggunakan perintah  nama_obyek.close();

  Program 12.11.
 Program untuk menulis teks ke dalam file
 #include<iostream.h> #include<fstream.h> voidmain(){ ofstreamfileteks; fileteks.open("C:/Catat.txt"); fileteks<<"Untukmencapaitujuanygbesar,makatujuanitu"<<endl; fileteks<<"harusdibagi‐bagimenjaditujuankecil"<<endl; fileteks<<"sampaitujuanitumerupakantujuanygdapat"<<"dicapai"<<endl; fileteks<<"berdasarkankondisidanpotensiygdimilikisaat"<<"itu"<<endl; fileteks.close(); }  perintah  fileteks.Open(“C:/catat.txt”); 
 akan membuka file catatan.txt yang ada di C:\ . Apabila file tersebut belum ada maka akan dibuat secara otomatis, dan apabila sudah ada isi file catatan.txt akan terhapus.  

12.12.4. Menambah Data File

 Suatu file yang sudah ada sebelumnya dapat ditambah data yang baru (tidak menghapus data)

Next read halaman 17.
tutorial operasi file halaman 15

tutorial operasi file halaman 15

Selamat datang di eagleboot dan selamat membaca.

12.12. Program Operasi FiIe

 Dari uraian operasi file diatas, dibawah ini merupakan beberapa operasi file yang sering dilakukan sehari-hari. Setiap kita bekerja dengan menggunakan komputer kita biasanya melakukan operasi membuka file, menulis file, menambah data file, menghapus file, menutip file dan lain sebagainya. Operasi tersebut dilakukan dengan menggunakan mouse atau keyboard secara langsung Bagaimana jika hal tersebut dilakukan leh program?. Tentunya hal tersebut harus ada instruksi atau perintah-perintah yang digunakan oleh tiap operasi tersebut. Dibawah ini merupakan beberapa operasi file yang dilakukan dengan bahasa C++.

  12.12. 1. Membuka file

 Perintah membuka file dan menghubungkannya dengan stream dengan fopen (library stdio.h) dan menutupnya dengan fclose FILE*fopen(char*nama_file,char *mode) FILE*fclose(FILE*pointer_file)  Dalam membuka file diperlukan mode, dimana hal tersebut  merupakan cara pengaksesan file. Berikut daftar mode yang dapat digunakan:  

Tabel 12.9. Mode operasi file pada C MODEARTI rMembukasebuahfileteksuntukpembacaan wMembuatsebuahfileteksuntukpenulisan aMenambahkandatakesebuahfileteks rbMembukasebuahfilebinaryuntukpembacaan wbMembuatsebuahfilebinaryuntukpenulisan abMenambahkandatakesebuahfilebinary r+Membukasebuahfileteksuntukpembacaan/penulisan w+Membuatsebuahfileteksuntukpembacaan/penulisan a+Menambahkandata/membuatfileteksuntuk pembacaan/penulisan r+bataurb+Membukasebuahfilebinaryuntukpembacaan/penulisan w+batauwb+Membuatsebuahfilebinaryuntukpembacaan/penulisan a+batauab+Menambahkandatakefilebinaryuntuk pembacaan/penulisan 

 Dalam operasi file dilakukan ada beberapa hal yang perlu diperhatikan antara lain: jika operasi open berhasil, fopen() mengembalikan sebuah file pointer yang valid, sedangkan jika operasi gagal, maka fopen() mengembalikan sebuah null pointer, sehingga harus selalu dicek pada saat pembukaan file. Perhatikan program dibawah ini: FILE*fp; if((fp=fopen("fileku.txt","r")==NULL){ cout<<"Errordalampembukaan file\n"; exit(1); } fclose(fp);//menutup streamfile  Dibawah ini merupakan fungsi untuk operasi file teks antara lain  a. fgetc()danfputc(),dimanaSintaknyadapatditulis: intfgetc(FILE*fp); intfputc(intch,FILE*fp); 

 Program 12.7
 include<stdio.h> #include<stdlib.h> usingnamespacestd; intmain() { FILE*fp; inti; intch; fp=fopen("foo.abc","w");//bukafilefoo.abcuntukditulisi for(i=0;i<10;i++){//loopuntukmeletakkankarakter2 fputc('A',fp);//menuliskankarakterA fputc('\n',fp);//menuliskanpergantianbaris } fclose(fp); if((fp=fopen("foo.abc","r"))==NULL){ cout<<"Errorreadingfile...\n"; exit(1); } while(ch!=EOF){//bacafilesampaitandaEOF(EndofFile) ch=fgetc(fp);//ambilsatukarakter putchar(ch);//menampilkankarakterkelayar } fclose(fp); 

Next read halaman 16.
tutorial operasi file halaman 14

tutorial operasi file halaman 14

Selamat datang di eagleboot dan selamat membaca.

ch=fgetc(in_file); if(ch==EOF) break; ++count; } cout<<"jumlahkarakter"<<FILE_NAME<<"adalah"<<count<<'\n'; fclose(in_file); return(0); }

 12.11.  File sekuensial

 Sequential file (Arsip sekuensial) adalah sekumpulan rekaman yang disimpan dalam media penyimpanan sekunder komputer, yang dapat diakses secara sekuensial mulai dari rekaman pertama sampai dengan rekaman yang terakhir, rekaman per rekaman secara searah. File sekuensial berisi rekord-rekord data yang tidak mengenal posisi baris atau nomor rekord pada saat aksesnya, dan setiap record dapat mempunyai lebar yang berbeda-beda.  Akses terhadapnya selalu dimulai dari awal file dan berjalan satu persatu menuju akhir dari file. Dengan demikian, penambahan file hanya dapat dilakukan terhadap akhir file, dan akses terhadap baris tertentu harus dimulai dari awal file.  Fungsi baku yang terkait dengan file sekuensial ini antara lain adalah fprintf, fscanf, dan rewind . Program berikut menyajikan penanganan file sekuensial tentang data nasabah yang berisi tiga field, yaitu nomor identitas (account), nama (name), dan posisi tabungannya (balance) untuk (1) menyajikan yang tabungannya bernilai nol, (2) berstatus kredit, dan (3) berstatus debet. Misalny sebuah file data tersimpan dengan nama klien.dat. Rekaman terakhir adalah rekaman fiktif, yang menandai akhir dari arsip. Pada beberapa implementasi, rekaman fiktif ini disebut sebagai EOF (End Of File). Arsip sekuensial berasal dari hasil perekaman (penulisan) yang juga dilakukan rekaman per rekaman. Setiap rekaman boleh berisi type dasar ataupun type terstruktur yang telah didefinisikan, setiap rekaman strukturnya sama.  Elemen dari rekaman disebut sebagai "field", ada field (atau juga sekumpulan field) rekaman yang disebut sebagai "key" karena kekhususannya dalam proses. Jika key dari setiap rekaman tidak ada yang sama (unik), maka key menjadi identitas rekaman, dan disebut "primary key". Setiap rekaman dapat diakses dan dikonsultasi (dibaca) menurut urutannya dengan pemanggilan primitif akses yang tersedia. Perekaman dapat dilakukan melalui primitif penulisan.  Perhatikan bahwa suatu arsip sekuensial hanya dapat disiapkan hanya pada salah satu modus operasi: diakses/dibaca, atau ditulis. Dalam definisi arsip sekuensial, tidak pernah sebuah arsip diproses untuk kedua modus: dibaca dan sekaligus ditulis. Primitif-primitif tsb, akan didefinisikan kemudian.


Program 12.6 #include<stdio.h> usingnamespacestd; voidmain(){ intrequest,account; floatbalance; charname[25]; FILE*cfPtr; if((cfPtr=fopen("klien.dat","r+"))==NULL) printf("Filecouldnotbeopened\n"); else{ printf("Enterrequest\n" "1‐Listaccountswithzerobalances\n" "2‐Listaccountswithcreditbalances\n" "3‐Listaccountswithdebitbalances\n" "4‐Endofrun\n?"); scanf("%d",&request); while(request!=4){ fscanf(cfPtr,"%d%s%f",&account,name,&balance); switch(request){ case1: printf("\nAccountswithzerobalances:\n"); while(!feof(cfPtr)){ if(balance==0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; case2: printf("\nAccountswithcreditbalances:\n"); while(!feof(cfPtr)){ if(balance<0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; case3: printf("\nAccountswithdebitbalances:\n"); while(!feof(cfPtr)){ if(balance>0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; } rewind(cfPtr); printf("\n?"); scanf("%d",&request); } printf("Endofrun.\n"); fclose(cfPtr); } }

Next read halaman 15.