Lỗi fflush(stdin) VS 2015

Em đang học C++ khi nhập vào fflush(stdin) trước getline(cin,ten)

khi chạy thử thì dấu enter vẫn bị nhận vào, em phải dùng cin.ignore() để thay thế cho fflush(stdin), em nhờ bạn chạy thử đoạn code trên máy nó thì vẫn hoạt động bình thường ??? nó dùng VS 2013 còn em dùng VS 2015, có ai có cách gì fix không giờ cài lại bản 2013 tốn thời gian quá.

fflush là để dành cho stdout. Xài fflush(stdin) thì gây ra undefined behavior. VS2015 làm vậy là đúng rồi. Xài cin.ignore(100, '\n'); mới đúng. Mấy thằng bạn viết fflush(stdin) là sai đó, kệ tụi nó :smile:

nếu kĩ hơn nữa thì viết là

cin.clear();   // clear cin nếu trước đó đọc vào bị lỗi
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //bỏ qua tất cả ký tự cho đến khi gặp '\n' thì dừng
2 Likes

chuẩn… dùng cin.ignore(100,’\n’); của c++ là đẹp nhất :smile:

Không biết Microsoft đã làm gì mà VS2015 lại không dùng được fflush(stdin). Chỉ cần cin.clear() cin.ignore() là được rồi. Phải clear trước vì nếu std::cin đang bật cờ lỗi thì không ignore được.

1 Like

Tks mọi người nhé, cứ tưởng bị lỗi phải cài lại

rewind(stdin) or while(getchar() != ‘\n’);

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?