01/10/2018, 16:15

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:

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

HK boy viết 18:25 ngày 01/10/2018

Đừ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ả.

rogp10 viết 18:21 ngày 01/10/2018

Đ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.

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

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.

Nguyen Trong Dung viết 18:25 ngày 01/10/2018

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

viết 18:17 ngày 01/10/2018

đọ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');
Bài liên quan
0