Hàm fflush(stdin) hoạt động như thế nào trên linux?

Như các bác thấy trên hình, trong hàm Nhap() mình đã có dùng fflush(stdin) để xóa buffer rồi, nhưng vẫn bị trôi lệnh. Điều bựa hơn là cùng code này mình chạy trên Win thì ok, bác nào biết giải thích dùm mình với.
Thanks ALL.
code mình đây:

Đừng dùng fflush(stdin) nữa. Chạy thêm 1 lần fgets(buffer, ..., stdin) để tống kí tự thừa vào 1 biến nào đó, từ đó yên tâm đọc dòng tiếp theo.

P/s: Thử

scanf("%hu\n", &...);
fgets(...);
fgets(...);

xem, chỉ sợ không có hiệu quả.

4 Likes

Đến VS cũng dẹp câu lệnh này rồi :smiley:

Lí do là vì flush là giật nước, trong lập trình nghĩa là tống buffer trong mem (volatile) xuống đĩa (hay terminal) non-volatile, tức là ghi lên. Vậy fflush chỉ có thể dùng để ghi.

1 Like

vậy cách tốt nhất để giải quyết nó là gì bác ?

đọc từng ký tự tới khi nào gặp ký tự xuống dòng thì dừng, hoặc tới khi nào đọc hết stdin thì dừng:

int c;
while ((c = getchar()) != EOF && c != '\n');
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?