Rabu, November 20, 2019

Permasalahan dengan scanf() ketika terdapat fgets() / gets() / scanf() setelahnya

Perhatikan contoh sederhana program bahasa C berikut ini. Program tersebut membaca nilai integer menggunakan scanf(), kemudian membaca sebuah string menggunakan fgets().

Input:
10
test

Output:
x = 10, str = 

Permasalahan yang terjadi pada kode program sebelumnya adalah scanf() menbaca nilai integer dan melepaskan sebuah karakter baris baru pada buffer. Sehingga fgets() hanya membaca baris baru dan string "test" diabaikan oleh program.

Permasalahan yang sama juga muncul ketika scanf() digunakan dalam sebuah looping.

Input:
a
b
q

Output:
......Enter q to quit......
Enter a character
a
Enter a character


Enter a character
b
Enter a character


Enter a character
q

Dapat disadari bahwa program mencetak hasil dengan ekstra karakter enter diikuti satu ekstra baris baru. Hal ini terjadi karena setiap scanf() meninggalkan sebuah karakter baris baru pada buffer yang kemudian terbaca olen scanf selanjutnya.

Bagaimana solusi dari permasalahan tersebut?
satu, Dapat dibuat dengan cara menjadikan scanf() membaca baris baru menggunakan ekstra "\n", yaitu scanf("%d\n,&x"). Faktanya scanf("%d",&x) juga dapat bekerja pada program (catatan: dengan spasi ekstra).

dua, Dapat ditambahkan getchar() setelah scanf() untuk membaca ekstra baris baru.





Related Posts

Permasalahan dengan scanf() ketika terdapat fgets() / gets() / scanf() setelahnya
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "