Jangan gunakan fflush, gunakan fungsi ini sebagai gantinya:
#include <stdio.h>
void clean_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
fflush(stdin)
tergantung implementasinya, tetapi fungsi ini selalu berfungsi. Di C, penggunaan fflush(stdin)
dianggap praktik yang buruk .
Perilaku fflush
tidak ditentukan untuk input stream (standar online 2011):
7.21.5.2fflush
fungsi
Sinopsis
1Deskripsi#include <stdio.h> int fflush(FILE *stream);
2 Jika aliran mengarah ke aliran keluaran atau aliran pembaruan di mana operasi terbaru tidak dimasukkan,fflush
fungsi menyebabkan data tidak tertulis apa pun untuk aliran itu dikirim ke lingkungan host untuk ditulis ke file; jika tidak, perilaku tidak ditentukan.
3 Jikastream
adalah pointer null,fflush
fungsi melakukan tindakan pembilasan ini pada semua aliran yang perilakunya ditentukan di atas.
Pengembalian
4fflush
fungsi menyetel indikator kesalahan untuk aliran dan mengembalikan EOF jika terjadi kesalahan penulisan, jika tidak maka mengembalikan nol.
Saya menghadapi masalah yang sama saat bekerja di LINUX dan solusi alternatif dari masalah ini adalah Anda menentukan karakter boneka katakanlah char dummy;
dan beri scanf()
untuk memindainya tepat sebelum input Anda yang sebenarnya terjadi. Ini bekerja untuk saya. Saya harap ini juga berhasil untuk Anda.
Salah satu yang selalu berfungsi di Linux:
#include <termios.h>
#include <unistd.h>
void clean_stdin()
{
int stdin_copy = dup(STDIN_FILENO);
/* remove garbage from stdin */
tcdrain(stdin_copy);
tcflush(stdin_copy, TCIFLUSH);
close(stdin_copy);
}
Anda dapat menggunakan tcdrain dan tcflush tidak hanya untuk in/out/err fd.
Pindahkan file ke direktori berdasarkan ekstensi
Bagaimana cara mengecek akses internet menggunakan skrip bash di linux?