30/09/2018, 23:35

Thắc mắc tại sao lệnh fflush(stdin) không có tác dụng?

#include<iostream>
#include<string>

using namespace std;

void main()
{
	int ngay, thang, nam;
	cout << "Nhap ngay thang nam sinh";
	cin >> ngay >> thang >> nam;
	cout << "ban sinh ngay:" << ngay << "-" << thang << "-" << nam << endl;
	cout << "Nhap ten cua ban: ";
	string ten;
	fflush(stdin);
	getline(cin, ten);
	cout << "Ten cua ban la: " << ten << endl;
	system("pause");
}

em mới học c++ và viết chương trình đơn giản như trên? nhưng cỏ vẻ như lệnh fflush(stdin) không có tác dụng( còn dùng lệnh cin.ignore() thì vẫn ổn). Mọi người giải thích dùm em với!

viết 01:50 ngày 01/10/2018

Bạn dùng chức năng tìm kiếm trên diễn đàn nhé, vấn đề này được bàn nhiều lần rồi, chẳng hạn như topic này:

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

Rem viết 01:38 ngày 01/10/2018

@freedom cảm ơn bạn, mình tìm nhiều mà ko ra nên mới lên đây hỏi

Lê Văn Hoàng viết 01:39 ngày 01/10/2018

nó chạy ra ntn bạn? bạn thử thêm 1 cái fflush(stdin) ngay dưới nữa coi sao

Rem viết 01:49 ngày 01/10/2018

vẫn bị bạn à. nghĩa là nó lấy ký tự enter dư lúc ta vừa nhập lúc trên vào chuỗi cần nhập tiếp theo đó bạn

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

Bạn thử thay fflush(stdin) bằng 1 câu lệnh sau: while(getchar() != '\n' && getchar() != EOF) {}

Trọng Nghĩa viết 01:42 ngày 01/10/2018

Visual 2013 trở lên ko còn hỗ trợ fflush nữa. Bạn thay lệnh nhập bằng getline+cin.ignore là đc

Rem viết 01:40 ngày 01/10/2018

thì lệnh cin.gnore đc, tại thì thấy demo lệnh fflush(stdin) đc mà m code lại ko được nên tò mò. cảm ơn các bạn

Bài liên quan
0