30/09/2018, 23:51

[VS-specific] Lỗi fflush(stdin)

Cho đang dùng Visual studio 2013 ultimate thấy khá ổn
Mấy hôm trước mình có cài thử cái VS 2015 bản community free trên trang chủ
Mình viết chương trình chạy rất OK nhưng chả hiểu sao có lệnh fflush(stdin) trên bản 2015 nó không hoạt động, mình dùng nó mà chương trình vẫn bị trôi lệnh nhưng chưa dùng.
Mình có test lại bằng bản 2013 nhưng nó vẫn chạy bình thường.
Ai biết vấn đề ở đâu giúp mình với

Người bí ẩn viết 01:57 ngày 01/10/2018

Microsoft Visual Studio 2015 sẽ không dùng được lệnh fflush(stdin); nữa.
Bạn có thể thay thế bằng dòng lệnh này: while (getchar() != '\n' && getchar() != EOF) {}

Pham Van Hai viết 01:54 ngày 01/10/2018

Bạn nên tham khảo cách dùng các hàm thông qua google để biết cách sử dụng đúng hơn:

fflush ko dùng cho stdin mà dùng cho stdout nếu dùng cho stdin nó sẽ gây undefined behavior. Còn vì sao thì ở đây có nói: or http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351 -> nên dùng cin.ignore() cho chắc

Sơn viết 02:00 ngày 01/10/2018

bạn thử dùng hàm rewind(stdin) xem.

Cong Son Ha viết 02:06 ngày 01/10/2018

Sao rewind(stdin) lại xóa đc bộ nhớ đệm thay fflush(stdin) vậy bạn

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

Lệnh rewind(stdin) chỉ dùng cho VS mà thôi.

Cong Son Ha viết 01:55 ngày 01/10/2018

bạn có biết lí do tại sao fflush(stdin) lại k xóa được enter nữa không vậy?

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

bạn có biết lí do tại sao fflush(stdin) lại k xóa được enter nữa không vậy?

Thực sự thì fflush không có nghĩa gì cả trong các luồng đọc như stdin, flush nghĩa là ghi từ buffer xuống đĩa, nên sau này trừ mỗi MS (VS) thì không ai hỗ trợ fflush(stdin). Vả lại stdin không phải chỉ có người nhập, mà còn có thể là do dẫn từ file vào nữa, nên xóa đi là sai.

ostream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

Ngay cả POSIX cũng có hạn chế: chỉ sử dụng fflush cho những luồng đọc có thể seek, mà stdin không có seek.

Cong Son Ha viết 02:05 ngày 01/10/2018

Mình hiểu rồi . Cảm ơn bạn nhiều <3

Bài liên quan
0