Saturday, January 23, 2010

Fungsi Input dalam Bahasa C

Jika kamu sangat pemula, ada baiknya kamu membaca artikel yang kutulis sebelumnya tentang Fungsi Output dalam Bahasa C. Fungsi input adalah fungsi yang digunakan untuk meminta masukan dari user. Fungsi input ini akan membuat program kita menjadi interaktif. Berikut akan coba kujelaskan fungsi-fungsi input dalam bahasa C yang sering digunakan.

1. getche()
Singkatan dari get character and echo. FUngsi ini meminta inputan satu buah karakter dari keyboard tanpa diakhiri dengan tombol enter dan karakter yang telah diketik oleh user akan ditampilkan di layar.

2. getch()
Fungsi ini sama halnya dengan getche. Hanya saja karakter yang diinputkan user tidak akan ditampilkan di layar.

3. getchar()
Singkatan dari get character. Fungsinya sama dengan fungsi getche(), namun jika kita menggunakan fungsi ini user harus mengakhiri inputan dengan tombol enter.

4. scanf()
Fungsi ini dapat menginput berbagai macam jenis data. Penggunaanya mirip dengan printf(), yaitu harus menggunakan conversion specifier. Seperti halnya printf, conversion specifier harus disesuaikan dengan jenis data yang ada pada arguments. Dalam penggunaannya, scanf() hampir sama dengan printf(). Lalu bedanya apa? Bedanya, scanf() digunakan menginput data sedangkan printf() digunakan untuk mengoutput data. Haha, jelaslah. Masih ada perbedaan lainnya kok, yaitu dalam penulisan arguments. Dalam scanf() kita harus menambahkan simbol '&' sebelum variabel. Biar jelas liat contoh aja...

Penggunaan printf():

printf("%d", var);

Itu maksudnya kita akan menampilkan informasi nilai dari variabel yang bernama var. Informasi tersebut berupa bilangan bulat (bisa dilihat dari conversion specifier-nya).

Penggunaan scanf():

scanf("%d", &var);

Itu maksudnya kita akan menginput bilangan bulat yang nilainya akan dimasukkan ke dalam alamat memori dari variabel var. Simbol '&' dalam bahasa C adalah operator yang digunakan sebagai penunjuk alamat memori (coba baca artikelku sebelumnya tentang operator dalam bahasa C). Ada sedikit perbedaan penulisan syntax scanf() ini ketika kita akan menginput data bertipe string (kumpulan karakter). Untuk menginput data bertipe string kita tidak perlu mencantumkan simbol '&' lagi. COntoh:

scanf("%s", str);

Lihat! Di atas aku tidak menggunakan simbol '&' sebelum menuliskan variabel str. Program tentu akan tetap berjalan dengan normal :D. Kelemahan dalam penginputan string menggunakan scanf() adalah ketika user memasukkan string yang mengandung spasi. Maka string akan terpotong di bagian spasi tersebut. Misalkan user menginput string "aku makan". Yang tersimpan dalam variabel str adalah "aku" saja. Lalu bagaimana jika kita ingin mengikutkan "makan" juga dalam variabel str? Hmm, don't be hasty, see the next function below! :P

5. gets()
Fungsi ini adalah fungsi yang sempurna dalam penginputan string. Fungsi ini seperti menambal kekurangan dari scanf() ketika menginput string. Tentu saja, fungsi ini hanya bisa menginput string. Dengan fungsi ini kita bisa menambahkan spasi dalam string inputan juga. Nice!

gets(str);

Jadi, jika user menginputkan "aku makan", maka yang tersimpan dalam variabel str adalah "aku makan" juga. Tanpa terpotong gara-gara spasi. Hmm, setiap ada kelebihan pasti ada kelemahan :O. Kelemahan fungsi ini adalah ketika kita menggunakannya lebih dari sekali. Maka biasanya fungsi gets() yang kedua atau yang ketiga tidak akan dieksekusi oleh program. Artinya fungsi gets() yang kedua atau yang ketiga menjadi tidak berguna :(. Memang kesalahan ini tidak selalu terjadi. Tapi aku cukup sering menemukan kesalahan ini ketika aku menggunakan fungsi gets. Mengapa kesalahan seperti ini dapat terjadi? Ini terjadi karena ketika user menginput pada fungsi gets() yang pertama, buffer input akan terisi penuh. Karena buffer input ini penuh, maka fungsi gets() yang kedua seakan-akan sudah diisi oleh user. Lalu bagaimana caranya mengosongkan buffer input? Cara mengosongkannya adalah menggunakan fungsi fflush(stdin).

gets(str1);
fflush(stdin);
gets(str2);
fflush(stdin);

Dengan begini buffer input akan selalu kosong setelah user melakukan inputan. Aku sering menggunakan fungsi fflush(stdin) ini tidak hanya setelah fungsi gets(), tapi juga kugunakan setelah fungsi inputan yang lain seperti scanf(), getch(), dll. Ini hanya tindakan preventif agar buffer input tidak penuh.

16 comment(s):

koza said...

bagus . . . .

Unknown said...

makasih.. makasih juga mau mampir + komen.. :)

ephie said...

hammiiiiiiieee
arigato gozaimatsu yo....
knowledge emang delicious ehmmmm yummi

Unknown said...

makasih mbak.. :D :D

Unknown said...

izin nummpang copas yak?
teneng aja, gw kalo posting selalu nyantumin sumbernya kok
:D

Unknown said...

iya iya, saya malah berterima kasih bgt klo artikel ini disebarin sm nyantumin sumbernya.. :D :D

Andy said...

nice info sob, aQ newbie nich. pengen belajar bahasa C dari awal. salam kenal ^_^

Unknown said...

oke, salam kenal juga. kita masih sama2 belajar.. :)

iiah husna said...

keren gan.....arigatou ... :D

Anonymous said...

Siip bgt,,nambah info pagi2 sebelum ujian C++

Anonymous said...

wah,tugas dasprogq selesei nih nuwun

Me said...

buffer input itu apa sih??? heheh maaf masih newbie

Anonymous said...

thanks share nya sangat membantuu :)

Anonymous said...

nice share..
mo nanya nih mas, kalo kita pake scanf() misal: scanf("%s",&string1); bedanya dengan scanf("%s",string1); itu apa yah?? karena keduanya bila dijalankan juga sama2 bisa nyimpen di variabel "string1" mohon pencerahannya..
oiya, sedikit trik, kalo mo pake scanf tapi karakter space nya tetep bisa kebaca, biasanya saya pakai scanf("%[^\n]",string1); itu scanf, nunggu sampai user menekan \n (enter).
ditunggu nih jawabnya.. makasih

ihsan said...

oke thank you gan :D Santekno

Unknown said...

Tetep gak bisa di isi bang -.- padahal aku udah kasih fflush

Post a Comment

feel free to write your comment here.. :)