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:
Hàm fflush(stdin) hoạt động như thế nào trên linux?
Đừ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
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