Cách nhập từ bàn phím khi sử dụng freopen

Cho em hỏi là hình như khi sử dụng freopen để mở và ghi file thì nó chỉ lấy thông tin trong file. Ngoài ra nếu có thêm vào chương trình hàm cin hay getline thì nó đều bỏ qua hết đúng không ạ?
Vậy làm thế nào để có thể nhập khi vẫn sử dụng freopen ạ ?

{
	freopen("INPUT.TXT", "rt", stdin);
	DSKhach a;
	a.Nhap();
	freopen("OUTPUT.TXT", "wt", stdout);
	string s;
	int num = a.getX();
	switch (num)
	{
	case 1: a.TimTheoID(); break;

	case 2:	
		cout << "Nhap FN: \n";
		cin >> s;
		a.TimTheoFN(s); 
		break;
	case 3: a.TimTheoLN(); break;

	case 4: a.TimTheoNS(); break;

	case 5: a.TimTheoGT(); break;

	case 6: a.TimTheoTP(); break;

	case 7: a.TimTheoNTT(); break;

	}
}

freopen() chỉ giúp ông thay vì nhập từ màn hình console thì nó đọc từ file. Chứ không phải là đọc ghi file nhé.

3 Likes

Bên dưới stdin với cin cũng chỉ là 1 stream mà thôi. Vả lại freopen không cho redirect với pipe gì cả nên rất hạn chế sử dụng.

3 Likes

Nó vẫn ghi ra 1 file được mà

Muốn dùng song song nhập/xuất từ bàn phím và tập tin thì dùng fopen() cho tập tin và cin/cout để nhập từ bàn phím.

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