30/09/2018, 19:16
Tại sao mình nhập fflush(stdin); thì chương trình vẫn nhận dấu enter,
đang học C++ được một bữa à :v mà sao tới bài 6 có chút thắc mắc nên ai biết giải đáp mình với
Tại sao mình nhập fflush(stdin); thì chương trình vẫn nhận dấu enter, mình phải dùng cin.ignore(1) để thay thế, mình đang sử dụng VS 2015
Bài liên quan
fflush là hàm dành cho output stream, stdin là input stream. Gọi
fflush(stdin);
thì ko bảo đảm là standard input sẽ được xóa hết.C++ thì tạm viết ngắn gọn là
cin.ignore(100, '\n');
Cái này vẫn ko đúng hết mọi trường hợp, ví dụ users họ nhập 101 khoảng trắng rồi mới enter thì cũng ko đúng.viết đúng phải là:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
. Để xàinumeric_limits
thì phải có#include <limits>
tuy nhiên vẫn gặp trường hợp người sử dụng họ ko nhập số mà nhập chữ thì lúc này input stream sẽ bị lỗi, ignore cũng ko xi nhê. Vậy để cho chắc luôn thì thêm
cin.clear();
trước khi ignore:đầy đủ là:
vì nó phức tạp và dài dòng nên người ta thường viết
fflush(stdin);
cho lẹ, nhưng nó ko đúng. Có trình dịch chịu flush input stream, có trình dịch sẽ kiểm tra stream truyền vào là input stream hay output stream, nếu là input stream thì ko làm gì cả. VS 2015 làm vậy rất là đúngoke ,cảm ơn nhé , rất bổ ích