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.





Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D

Footer Adsense