SEJARAH C
Akar dari bahasa C adalah BPCL yang dikembangkan oleh Martin Richards pada tahun 1967, kemudian dikembangkan menjadi bahasa B oleh Ken Thompson pada tahun 1970. Yang dikembangkan lebih lanjut menjadi bahasa C oleh Dennis Ritchie sekitar tahun 1970-an di Bell Telephone Laboratories Inc.
C adalah bahasa standar, artinya suatu program ditulis dengan versi bahasa C tertentu akan dapat dikompilasi dengan versi bahasa C yang lain dengan sedikit modifikasi. Kepopuleran C membuat versi-versi yang banyak untuk komputer mikro. Untuk menstandarisasikannya maka dibentuk komite pada tahun 1983 yang menetapkan standar ANSI untuk bahasa C.
Alasan-alasan Menggunakan Bahasa C
1. Bahasa C tersedia hampir disemua jenis komputer. 2. Kode bahasa C bersifat Portable.
3. Bahasa C hanya menyediakan sedikit Reserved Word. Keandalan C dicapai dengan fungsi-fungsi pustaka.
4. Proses executable program dalam bahasa C lebih cepat. 5. Dukungan pustaka yang banyak.
6. C merupakan bahasa terstruktur.
STRUKTUR PROGRAM C
Struktur program C dapat dilihat sebagai kumpulan satu atau lebih fungsi-fungsi. Fungsi yang harus ada adalah main( ), karena fungsi ini merupakan titik awal dan titik akhir peng-eksekusian program. Diawali dengan tanda ( { ) dan diakhiri dengan ( } ).
Bentuk umumnya: main() {
Block statement; }
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur, karena strukturnya menggunakan fungsi-fungsisebagai program-program bagian (subroutine). Fungsi-fungsi ini dapat ditulis setelah fungsi utama atau diletakkan di file pustaka (library). Jika Fungsi diletakkan di file library dan akan dipakai pada suatu program maka nama header file- nya harus disertakan didalam program dengan preprocessor directive #include.
Contoh program sederhana: #include <stdio.h> main()
{
printf(“Selamat Datang”); }
Hasilnya:
Header File
Merupakan file yang berisi prototype (judul, nama, dan sintaks ) dari sekumpulan fungsi-fungsipustaka tertentu, sedangkan fungsi-fungsi pustakanya sendiri disimpan difile pustaka (library file dengan extension .LIB). Cara penulisannya adalah
#include <nama header file> atau
#include “nama header file”
Reserved Word
Bahasa C standar ANSI mempunyai 32 kata kunci dan turbo C menambahkan 7 kata kunci. Katakunci ini tidak dapat digunakan sebagai nama variable atau nama fungsi.
asm * default for pascal * switch
auto do goto register typedef
break double huge * return union
case else if short unsigned
cdecl * enum int signed void
char extern interrupt * sizeof volatile
const far * long static while
continue float near * struct
Tanda * menunjukan tambahan dari turbo C. Bahasa C adalah bahasa yang case sensitive. Huruf kecil dibedakan dengan huruf besar dan semua kata kunci ditulis dalam huruf kecil.
Identifier Name
Merupakan nama yang dibuat oleh programmer untuk pemberian nama variable, konstanta, fungsi atau label. Ketentuan membuat identifier name adalah sebagai berikut:
1. Panjang minimal 1 karakter, maksimaltidak terbatas, tetapi hanya 32 karakter pertama saja yang diperhatikan.
2. Karakter pertama harus berupa huruf atau garis bawah.
3. Tidak diperbolehkan menggunakan karakter khusus dan blank/spasi. 4. Case sensitive, huruf besar dan kecil dianggap beda.
5. Tidak diperkenankan menggunakan kata kunci. Statement-statement
Empty Statement / Null Statement
Statemen kosong adalah statement yang hanya terdiri dari peng-akhir titik koma saja, sehingga tidak melakukan tindakan apapun. Digunakan untuk membuat perulangan kosong yang dimaksudkan untuk memberi jarak ke proses selanjutnya.
Expression Statement
Statemen ungkapan merupakan statemen yang dibentuk dari ungkapan yang diakhiri dengan titik koma.
Control Statement
Statemen kendali merupakan statemen yang berfungsi untuk mengendalikan proses dari program, dapat berupa proses seleksi kondisi, perulangan atau lompatan. Statemen ini dibentuk dengan menggunakan kata kunci if, switch, do-while, goto, break dan continue.
Coumpound Statement/Block Statement
Statemen jamak adalah statemen yang terdiri dari beberapa statemen tunggalyang ditulis diantara tanda kurung kurawal ( { } )
C menyediakan 5 macam tipe data dasar, yaitu tipe data integer (numerik bulat dideklarasikan dengan int), floating point (numerik pecahan ketepatan tunggal dideklarasikan dengan float), double precision (numerik pecahan ketepatan ganda dideklarasikan dengan double), karakter (dideklarasikan dengan char) dan kosong (dideklarasikan dengan void).
Untuk int, float, double dan char dapat dikombinasikan dengan pengubah (modifier) signed, unsigned, long, short, maka hasilnya menjadi seperti pada tabel berikut.
TIPE DATA DASAR
TIPE Lebar Jangkauan Nilai
int 16 bit - 32768 s/d 32767
signed int short int
signed short int
unsigned int 16 bit 0 s/d 65535
unsigned short int
long int 32 bit - 2147483648 s/d 2147483649
signed long int
unsigned long int 32 bit 0 s/d 4294967296
float 32 bit 3.4E-38 s/d 3.4E+38
double 64 bit 1.7E-308 s/d 1.7E+308
long double 80 bit 3.4E-4932 s/d 3.4E+4932
char 8 bit - 128 s/d 127
signed char
unsigned char 8 bit 0 s/d 255
Konstanta
Konstanta adalah suatu nilai yang tidak pernah berubah selama proses program. Dibagi menjadi 4, yaitu:
a. Konstanta Numerik Integer
b. Konstanta numerik pecahan
Merupakan nilai numerik yang dapat mempunyai nilai pecahan dibelakang titik desimal. Dapat bernilai ketepatan tunggal (float), ketepatan ganda (double), atau ketepatan ganda panjang (long double).
c. Konstanta Karakter dan String
Merupakan nilai sebuah karakter yang ditulis diantara tanda petik ganda. Pengertian karakter disini meliputi huruf a-z atau A-Z, digit 0 – 9 karakter khusus dan karakter grafik.
d. Konstanta Karakter Escape
Escape character banyak digunakan di statemen-statemen untuk menampilkan hasil. Konstanta karakter escape diawali dengan tanda ‘ \ ‘.
Karakter Escape Fungsi
\a bunyi bel (bell atau alert) \b mundur 1 spasi (backspace)
\f ganti halaman (form feed) \n ganti baris baru (new line)
\r ke kolom pertama, baris yang sama (carriage return) \t tabulasi horisontal
\v tabulasi vertikal \0 nilai kosong (null)
\’ karakter petik tunggal \” karakter petik ganda
\\ karakter backslash
OPERATOR
Operator adalah suatu tanda atau simbol yang digunakan untuk suatu operasi tertentu. Bahas aC menyediakan operator pengerjaan, operator aritmatika, operator tipe, operator hubungan, operator logika, operator bitwise, operator ternary dan operator koma.
Operator Aritmatika
Operator aritmatika melibatkan 2 buah operand, terkadang operand yang digunakan berbeda tipenya. Untuk menghindari hal-hal yang tidak diinginkan maka kompiler C mempunyai pedoman untuk operand yang berbeda tipe:
2. Tipe float akan dikonversikan ke tipe double
3. Jenjang tertinggi adalah mulai dari long double, double, long int, unsigned int, dan int. Ini berarti tipe double dioperasikan dengan tipe int akan menghasilkan tipe double.
Operator Fungsi Jenjang
* Perkalian 3
/ Pembagian 3
% Pembagian modulo (Sisa pembagian) 3
+ Penjumlahan 4
- Pengurangan 4
Operator Unary
Operator unary merupakan operator yang hanya menggunakan sebuah operand saja. Operator-operator unary mempunyai jenjang 2.
Operator Fungsi
- Unary minuss
++ Increase dgn penambahan nilai 1 -- Decrease dengan pengurangan nilai 1 (tipe) Cast
sizeof Ukuran operand dalam byte
! unary NOT
~ Komplemen 1 (bitwise NOT)
& Menghasilkan alamat memori operand(operator pointer) * Menghasilkan nilai pengenal dialamatnya(operator pointer)
Operator Pengerjaan Aritmatika
Operator pengejaan digunakan untuk memindahkan nilai dari suatu ungkapan kesuatu pengenal. Operator pengerjaan mempunyai jenjang 14.
Operator Contoh Ekuivalen dengan
Operator Relasional
Operator hubungan digunakan untuk menunjukkan hubungan antara 2 buah operand. Banyak digunakan untuk penyeleksian kondisi dengan statemen if, do-while, atau while.
Operator Fungsi Jenjang
< Lebih kecil dari 6
<= Lebih kecil atau sama dengan 6
> Lebih besar dari 6
>= Lebih besar atau sama dengan 6
== Sama dengan 7
!= Tidak sama dengan 7
Operator Logika (Logical Operator)
Operator logika digunakan untuk membandingkan logika hasil dari operator-operator hubungan.
Operator Fungsi Jenjang
&& Logika DAN (AND) 11
|| Logika ATAU (OR) 12
Operator Koma (Comma Operator)
Operator koma digunakan untuk menggabungkan beberapa ungkapan dengan proses yang berurutan dari ungkapan sebelah kiri koma ke ungkapan sebelah kanan koma. Operator koma mempunyai jenjang 16.
Operator Bitwise
Operator bitwise digunakan untuk memanipulasi bit-bit nilai data yang ada di memori. Operator-operator ini hanya dapat digunakan untuk tipe data char, int, dan long int.
Operator Fungsi Jenjang
<< Pergeseran bit ke kiri 5
>> Pergeseran bit ke kanan 5
& Bitwise AND 8
^ Bitwise XOR (Exclusive OR) 9
| Bitwise OR 10
Operator Pengerjaan Bitwise
Operator Contoh Ekuivalen dengan
<<= A <<= 2 A = A << 2 >>= A >>= 2 A = A >> 2
&= A &= 0x1b A = A & 0x1b
^= A ^= 0x1b A = A ^ 0x1b
|= A |= 0x1b A = A | 0x1b
Menampilkan hasil
Prototype dari fungsi-fungsi untuk menampilkan hasil terdapat pada file judul stdio.h bersifat standar yaitu putchar(), puts(), printf(), fprintf() dan conio.h bersifat tidak standar, dalam arti tidak semua kompiler C menyediakan yaitu clrscr(), gotoxy().
Untuk menampilkan hasil tidak terformat digunakan putchar() untuk menampilkan karakter tidak terformat dan puts() untuk menampilkan string tidak terformat. Maksudnya tidak terformat adalah lebar dan bentuk tampilannya tidak dapat diatur.
Sedangkan untuk hasil terformat digunakan perintah printf dengan kode-kode format sebagai berikut ini:
Kode Format Fungsi
%c Menampilkan sebuah karakter %s Menampilkan nilai string
%d Menampilkan nilai desimal integer %i Menampilkan nilai desimal integer
%u Menampilkan nilai desimal integer tidak bertanda %x Menampilkan nilai heksa desimal integer
%o Menampilkan nilai oktal integer %f Menampilkan nilai pecahan
%e Menampilkan nilai pecahan dalam notasi scientific
%g Sebagai pengganti ‘%f’ atau ‘%e’ tergantung mana yang terpendek %p Menampilkan suatu alamat memori untuk pointer
Fungsi-fungsi pustaka yang digunakan untuk memasukkan data melalui keyboard, prototypenya ada di file judul stdio.h dan conio.h . Fungsi-fungsi yang menggunakan file judul stdio.h yaitu gets() dan scanf(). Sedangkan fungsi yang menggunakan file judul conio.h, yaitu getche(), getchar(), dan getch().
Untuk memasukkan nilai karakter tidak terformat digunakan getche(), getchar() dan getch, tergantung dari karakteristik masing-masing. getche() digunakan jika nilai karakter yang dimasukan tanpa diakhiri dengan penekanan tombol enter, sedangkan jika dengan penekanan tombol enter maka digunakan getchar(), sedangkan jika pemasukkan nilai karakter tidak diakhiri dengan penekanan tombol enter dan karakter yang di input tidak tampak dilayar maka digunaka getch(). Untuk meng-input nilai string digunakan gets().
Untuk meng-input nilai data terformat digunakan perintah scanf(), dengan kode format sebagai berikut:
Kode Format Fungsi
%c Membaca sebuah karakter
%s Membaca nilai string
%d Membaca nilai desimal integer %i Membaca nilai desimal integer %x Membaca nilai heksa desimal integer %o Membaca nilai oktal integer
%f Membaca nilai pecahan
%e Membaca nilai pecahan
%g Membaca nilai pecahan
%h Membaca nilai short integer desimal
PENYELEKSIAN KONDISI
Statement If
Bentuk If tunggal sederhana Sintaks:
if ( kondisi ) statement ;
contoh:
#include <stdio.h> main()
{
int JumlahAnak;
float GajiKotor, Tunjangan, PersenTunjangan = 0.2; printf (“Gaji Kotor ? ”);
scanf (“%f”, &GajiKotor); printf (“Jumlah Anak ? ”); scanf (“%f”, &JumlahAnak);
if (JumlahAnal > 2) PersenTunjangan = 0.3; Tunjangan = GajiKotor * PersenTunjangan ;
Printf(\nBesarnya Tunjangan = Rp %10.2f\n”, Tunjangan); }
Hasilnya:
Gaji Kotor ? 100000 Jumlah Anak ? 5
Besarnya Tunjangan = Rp 30000.00
Bentuk If tunggal blok statement Sintaks:
if ( kondisi ) {
blok statement; }
Bentuk If Else Sintaks:
if ( kondisi ) statement1; else
statement2;
Statement setelah kondisi atau statement sesudah else dapat berupa statement kosong, statement tunggal maupun blok statement. statement1 akan dijalankan jika kondisi benar, jika salah maka statement2 yang akan diproses.
Bentuk If..else if…else Sintaks:
if ( kondisi 1) statement1; else if ( kondisi 2 )
statement2; else if ( kondisi 3)
statement3; .
:
else
statement default;
Bentuk If bersarang ( nested if ) Sintaks:
if ( kondisi 1) if ( kondisi 2) ...
if (kondisi n ) statement; else
statement; ....
else
statement; else statement;
Kondisi yang akan diseleksi pertama kali adalah kondisi yang paling luar (kondisi 1). Jika bernilai benar maka statement setelah else yang terluar ( pasangan dari if yang bersangkutan ) yang akan diproses.
Bentuk If dengan kondisi berupa variable Contoh:
if ( D == 0 )
printf (“Nilai D sama dengan Nol \n”); else
printf (“Nilai D tidak sama dengan Nol \n”);
Bentuk If dengan kondisi Jamak
Beberapa kondisi dapat diseleksi sekaligus dalam statement if dengan menggunakan operator logika AND ( && ), OR ( || ), atau NOT ( ! )
Operator ?
Dapat digunakan untuk menggantikan statement if..else.. Sintaks:
Jika benar statement1 akan diproses, jika salah statement2 yang akan diproses.
Statement Switch
Statement Switch tunggal Sintaks:
switch ( kondisi ) {
case konstanta1 : statement-statement; break;
case konstanta2 : statement-statement; break;
.... default:
statement-statement; }
Statement nested switch
Yaitu statement switch yang berada didalam switch lainnya. Sintaks:
switch ( kondisi ) {
case konstanta 1 : statement-statement ; switch ( kondisi x ) {
case konstanta 1a : statement-statement ; break;
statement-statement ; break;
} break;
case konstanta 2 : statement-statement; break;
}
2.9 Perulangan a. Statement for
Sintaks:
for ( inisialisasi; terminasi; iterasi ) statement;
inisialisasi adalah pemberian nilai awal variable untuk perulangan, terminasi adalah pemberian nilai akhir atau batas perulangan, iterasi adalah perubahan variable kontrol (counter).
b. Statement while Sintaks:
while (kondisi ) statement;
Statement dapat berupa statement kosong, statement tunggal maupun blok statement. Proses perulangan akan terus dilaksanakan jika kondisi dalam while masih bernilai benar.
c. Statement do…while Sintaks:
do
Sedikitnya statement akan diproses sebanyak 1 kali karena seleksi kondisi dilaksanakan diakhir statement.
d. Statement continue
Statement continue akan menyebabkan proses perulangan kembali ke awal perulangan dengan mengabaikan statement setelah statement continue.
e. Statement break
Statement break akan menyebabkan proses keluar dari blok looping atau blok statement pada case.
f. Statement goto label
Digunakan untuk melompat dari satu proses ke proses tertentu didalam program.
Sintaks:
goto label;
2.10 Array (Larik)
Larik adalah kumpulan nilai-nilai data bertipe sama dalam urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data di suatu larik disebut dengan elemen larik yang letak urutannya ditunjukkan oleh suatu subscript atau suatu index yang dimulai dengan index nol.
Larik dapat berdimensi satu (one dimensional array) yang mewakili suatu vektor, larik berdimensi dua (two dimensional array) mewakili bentuk suatu matrik atau tabel, larik berdimensi tiga (three dimensional array) mewakili suatu bentuk ruang atau berdimensi lebih dari tiga.
Suatu larik dapat dideklarasikan dengan menyebutkan jumlah dari elemennya yang dituliskan diantara tanda ‘[ ]’, contohnya:
Int X[5];
Berarti variabel X bertipe integer dan merupakan larik dimensi satu. Contoh larik berdimensi Satu :
{ float X[3] = {5,3,7}, Total = 0; int I;
for(I=0;I<=2;I++) Total = Total + X[I]; printf(‘Total = %f \n”,Total);
}
Hasilnya:
Total = 15.000000
2.10.1 Larik dimensi dua
Pendeklarasian larik dimensi dua:
int X[3][4]; berarti akan membentuk matrik dengan ukuran 3 baris X 4 kolom
int X[2][3] = {1,2,3,4,5,6} matrik 2X3
atau larik tidak berukuran seperti : int X[ ][4] = {1,2,3,4,5,6,7,8} matrik 2X4
Contoh larik dimensi dua: #include <stdio.h> main()
{ int I,J;
float X[3][4] = { 12.34, 34.56, 56.78, 78.90, 23.45, 45.67, 67.89, 89.01, 34.56, 56.78, 78.90, 90.12};
/*Menampilkan dalam bentuk matrik*/ for(I=0;I<3;I++)
{
for(J=0;J<3;J++) printf(“%8.2f”, X[I][J]); printf(“\n”);
} printf(“\n”); }
12.34 34.56 56.78 78.90 23.45 45.67 67.89 89.01 34.56 56.78 78.90 90.12
2.10.2 Larik string
Hubungan antara nilai larik string dengan nilai larik karakter
Contoh:
#include <stdio.h> main()
{ int I,J;
char Hari[7][10] = {“Minggu”, “Senin”, “Selasa”, “Rabu”, “Kamis”, “Jum’at”, “Sabtu” };
for(I=0;I<7;I++)
{ for(J=0;J<10;J++) printf(“%c”, Hari[I][J]); printf(“\n”); } }
Hasilnya: Minggu Senin Selasa Rabu Kamis Jum’at Sabtu
String Character
2.11 Pointer
Suatu pointer (variabel penunjuk) adalah suatu variabel yang berisi dengan alamat lokasi suatu memori tertentu. Bahasa C menyediakan 2 buah operator untuk operasi pointer yaitu operator ‘*’ dan operator ‘&’.
Operator ‘*’ digunakan untuk mendapatkan nilai dari operandnya. Operand untuk operator ‘*’ adalah variabel pointer. Dengan kata lain operator ‘*’ digunakan untuk mendapatkan nilai yang berada dialamat memori yang ditunjukkan oleh variabel pointer. Operator ’&’ digunakan untuk mendapatkan alamat memori dari operandnya.
printf(“Nilai variabel X adalah %c \n”, X); printf(“Nilai variabel Y adalah %c \n”, Y); printf(“Nilai variabel Z adalah %c \n”, Z);
printf(“Nilai variabel X berada di alamat %p \n”, Alamat_X); }
Hasilnya:
Nilai variabel X adalah J Nilai variabel Y adalah J Nilai variabel Z adalah J
Nilai variabel X berada di alamat FFDB
Nilai variabel Z didapat dengan mengambil nilai yang berada di suatu alamat memori tertentu yang ditunjukkan oleh variabel pointer Alamat_X sebagai berikut :
Sedangkan variabel pointer Alamat_X sudah berisi dengan alamat letak dari nilai variabel X sebagai berikut :
Alamat_X = &X;
Dengan demikian berarti variabel Z akan berisi nilai yang sama dengan nilai variabel X.
2.12 Deklarasi Pointer
Variabel pointer dideklarasikan dengan nama variabelnya ditulis dengan diawali karakter asterik. Bentuk umumnya:
Tipe-data *nama-variabel-pointer;
Variabel pointer yang dideklarasikan dapat juga langsung diberikan nilai awal. Variabel pointer harus dideklarasikan dengan tipe yang sesuai dengan tipe data di memori yang ditunjuknya. Misalnya data yang ada dimemori bertipe float(4 byte) dan variabel pointer yang menunjukkan kealamat ini adalah bertipe int(2 byte), maka hanya 2 byte pertama saja yang akan diambil dengan hasil yang tidak sesuai dengan yang diharapkan.
Operasi Aritmatika
Suatu variable pointer dapat ditambahkan atau dikurangi dengan nilai integer (hanya integer saja, tidak untuk yang lain) atau dengan variable pointer lainnya. Operasi penambahan pointer dengan suatu nilai integer merupakan peningkatan nilai pointer yang menunjukkan lokasi nilai data berikutnya (bukan byte berikutnya) dimemori. Misalnya variabel pointer X menunjukkan alamat memori 1000, maka operasi penambahan X+1 menunjukkan alamat 1000+sizeof(X). Jika X bertipe integer maka operasi X+1 akan menunjukkan alamat 1002. Jika X bertipe float, maka operasi X+1 akan menunjukkan alamat 1004.
1000 1001 1002 1003 1004 1005 1006 1007 ... 1000+2Xn
……
X X+1 X+2 X+3 X+n
Jika X dideklarasikan sebagai float maka operai X+1, X+2, X+3 dst dapat digambarkan sebagai berikut :
1000 1001 1002 1003 1004 1005 1006 1007 1008 ... 1000+4Xn ……
X X+1 X+2 X+n
Operasi pengurangan pointer dengan nilai integer menunjukkan alamat letak data sebelumnya. Misalkan X adalah variabel pointer bertipe int yang menunjukkan alamat 1000, maka operasi X-3 akan menunjukkan alamat 994.
2.13 Operasi File
File adalah sebuah organisasi dari sejumlah record. Masing-masing record dapat terdiri dari satu atau beberapa field. Setiap field terdiri dari satu atau beberapa byte.
Untuk membuka file atau mengaktifkan sebuah file, fungsi yang digunakan adalah fungsi fopen(), dimana file tersebut dapat berupa file biner atau file teks. File biner adalah file yang mempunyai pola penyimpanan di dalam disk dalam bentuk biner, yaitu seperti bentuk pada memori komputer (RAM). Sedangkan file teks adalah suatu file yang mempunyai pola penyimpanan data yang berbentuk karakter. Penambahan yang perlu dilakukan untuk menentukan mode teks atau biner adalah ‘t’ untuk file teks dan ‘b’ untuk file biner.
Prototype fungsi fopen() terdapat di dalam header fungsi “stdio.h”, bentuk umumnya adalah:
File *fopen(char *namafile, char *mode); 1000
Dimana namafile adalah nama dari file yang akan di buka atau diaktifkan dan mode adalah jenis operasi file yang akan dilakukan terhadap file.
2.13.1 Jenis-jenis Operasi File
Jenis-jenis operasi file adalah sebagai berikut:
r : menyarankan file hanya dapat dibaca (file yang sudah ada)
w : menyatakan file baru akan dibuat atau diciptakan (file yang sudah ada akan dihapus)
a : untuk membuka file yang sudah ada dan akan dilakukan proses penambahan data. Jika file belum ada maka secara otomatis akan dibuat.
r+ : untuk membuka file yang sudah ada dan akan dilakuakn suatu proses pembacaan dan penulisan.
w+ : untuk membuka suatu file dengan tujuan untuk pembacaan atau penulisan. Jika file sudah ada maka isinya akan dihapus.
a+ : untuk membuka file dengan operasi yang akan dilakukan berupa perakaman maupun pembacaan. Jika file sudah ada maka isinya akan dihapus.
Contoh:
pf = fopen(“COBA.TXT”, “w”);
2.14 Menutup File
Untuk menutup file, fungsi yang digunakan adalah fclose(). Prototype fungsi ini terletak di header file “stdio.h”. bentuk umumnya adalah:
int fclose(FILE *pf); atau
int fcloseall(void);
2.15 Melaksanakan Proses File
putc(int ch, file *fp) dimana,
fp adalah pointer file yang dihasilkan oleh fopen(), dan ch adalah karakter yang akan ditulis
contoh program: #include “stdio.h” #include “conio.h” #define CTRL_Z 26
{ file *pf; /* pointer ke file */
if((pf = fopen(“COBA.TXT”, “w”)) == NULL) /* ciptakan file */ { cputs(“File tak dapat diciptakan !\r\n”);
exit(1); /* selesai */
while((kar=getche()) != CTRL_Z)
putc(kar, pf); /* tulis ke file */
fclose(pf); /* tutup file */
};
untuk membaca karakter dari file, fungsi yang digunakan adalah: getc(file *fp);
dimana
fp adalah pointer file yang dihasilkan oleh fopen().
Fungsi feof() yang digunakan untuk mendeteksi akhir file. Pada saat membaca data foef(file *fp)
Contoh program:
#include “stdio.h” #include “conio.h” void main()
{ file *pf; /* pointer ke file */
char kar; clrscr();
{ cputs(“File tak dapat dibuka !\r\n”);
exit(1); /* selesai */
while((kar=getc(pf)) != EOF)
putch(kar); /* tampilkan ke layar */
fclose(pf); /* tutup file */
};
Membaca dan Menulis String
Fungsi untuk membaca dan menulis string adalah : fgets() dan fputs() Bentuk Umum :
fgets(char *str, int p, file *fp) fputs(char *str, file *fp)
Membaca dan Menulis Blok Data
Fungsi untuk membaca dan menulis blok data adalah : fread() dan fwrite() Bentuk umum :
fread(void *buffer, int b_byte, int c, file *fp); fwrite(void *buffer, int b_byte, int c, file *fp);
dimana
buffer adalah pointer ke sebuah area di memori yang menampung data yang akan dibaca dari file.
b_byte adalah banyaknya byte yang akan dibaca atau ditulis ke file c adalah banyaknya item dibaca/ditulis.
Membaca dan Menulis File yang Terformat
Jika diinginkan, data bilangan dapat disimpan ke dalam file dalam keadaan terformat. Fungsi yang digunakan adalah:
fprintf(ptr_file, “string control”, daftar argument); fscanf(pts_file, “string control”, daftar argument);
void main() { FILE *pformat; char jawaban; struct;
{ int x; int y; } koordinat;
/* Buka dan ciptakan file. Periksa kalau gagal dibuka */
if((pformat = fopen(“KOORDINAT.TXT”, “w”)) == NULL) /* buka file */ { cputs(“File tak dapat dibuka !\r\n”);
exit(1); /* selesai */
{ clrscr();
cputs(“Masukkan data koordinat (bilangan integer)\r\n”); cputs(“Format : posisi x posisi y\r\n”);
cputs(“Contoh : 20 30 [ENTER]\r\n”); scanf(“%i %i, &koordinat.x, &koordinat.y); fflush(stdin);
/* Rekam ke file */
fprintf(pformat, %5i %5i\n”, koordinat.x, koordinat.y); cputs(“\r\nMenyimpan data lagi (Y/T) ??”);
jawaban = getche(); }
while(jawaban == ‘y’ || jawaban == ‘Y’); fclose(pformat);
2.16 File Sequensial
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. File data tersimpan dengan nama klien.dat.
Contoh program:
#include <stdio.h> void main() {
int request, account; float balance;
char name[25]; FILE *cfPtr;
if ( (cfPtr = fopen("klien.dat", "r+") ) == NULL ) printf("File could not be opened\n");
else {
printf ( "Enter request\n"
"1 - List accounts with zero balances\n" "2 - List accounts with credit balances\n" "3 - List accounts with debit balances\n" "4 - End of run\n? " ) ;
scanf( "%d", &request ); while (request != 4) {
switch (request) { case 1:
printf ("\nAccounts with zero balances:\n"); while ( !feof(cfPtr) ) {
if (balance == 0)
printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); }
break; case 2:
printf ("\nAccounts with credit balances:\n"); while ( !feof(cfPtr) ) {
if (balance < 0)
printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); }
break; case 3:
printf ("\nAccounts with debit balances:\n"); while ( !feof(cfPtr) ) {
if (balance > 0)
printf ("%-10d%-13s7.2f\n", account, name, balance); fscanf (cfPtr, "%d%s%f", &account, name, &balance); }
printf ("End of run.\n"); fclose(cfPtr);