Lỗi nhập xuất khi sử dụng freopen

mọi người ơi cho em hỏi em em có sử dụng freopen và khi đóng sử dụng em muốn nhập và xuất ra màng hình console nó sẽ xảy ra 2 trường hợp: 1 là báo lỗi debug 2 là chạy 1 vèo rồi tắt màng hình console không nhập không xuất gì cả kiểu bỏ qua luôn ý, cho em hỏi là em bị sao vậy ạ, em đang thao tác trên visual studio C+

Code của bạn đâu rồi?

Dạ đây ạ vì code oop rất dài nên em chỉ lấy 1 phần nhỏ của dính lỗi:

#include “Company.h”
void Company::input(){


FILE* INPUT=freopen("input.txt", "r", stdin);
string type;

while (getline(cin, type, ','))
{
	char temp = type[0];
	if (temp == 'M') {
		CEmployee* CM = new CManager;
		CM->Input();
		company.push_back(CM);
	}
	if (temp == 'P')
	{
		CEmployee* CP = new CProgrammer;
		CP->Input();
		company.push_back(CP);
	}
	if (temp == 'D')
	{
		CEmployee* CD = new CDesigner;
		CD->Input();
		company.push_back(CD);
	}
	if (temp == 'T')
	{
		CEmployee* CT = new CTester;
		CT->Input();
		company.push_back(CT);
	}
}
fclose(stdin);


}
void Company::output() {
int n = company.size();
cout << n << " Nhan Vien: ";
int dem = 0;
FILE* OUTPUT=freopen(“output.txt”, “w”, stdout);
for (int i = 0; i < company.size(); i++) {
company[i]->Output(); cout << endl;
}
fclose(stdout);
}
float Company::Salary() {
float basicsalary;
string type;
cin.clear();
FILE* INPUT=freopen(“SALARY.txt”, “r”, stdin);
{
cin >> basicsalary;
cin.ignore();
while (getline(cin, type, ’ '))
{


		for (int i = 0; i < company.size(); i++)
		{
			company[i]->setbasicsalary(basicsalary);

			if (company[i]->getID() ==type)
			{
				int n = cin.tellg();
				cin.seekg(n + 1);
				company[i]->UpdateSalary();
				cin.ignore();
			}
		}
	}
}
fclose(stdin);

int sum=0;
FILE* OUTPUT=freopen("outputsalary.txt", "w", stdout);
cout << "\n---------- employee salary -----------\n";
for (int i = 0; i < company.size(); i++)
{
	
	string a = company[i]->getID();
	int temp;
	if (a[0] == 'M') {
		temp = company[i]->getbasicsalary()*company[i]->getwagecoefficient();
		cout << company[i]->getID() << ": " << to_string(temp)<<endl;
		sum =sum+ temp;
	}
	if (a[0] == 'P') {
		temp= company[i]->getbasicsalary() *company[i]->getwagecoefficient() + company[i]->extrasalary();
		cout << company[i]->getID() << ": " << to_string(temp) <<endl;
		sum = sum + temp;
	}
	if (a[0] == 'D')
	{
		temp = company[i]->getbasicsalary() * company[i]->getwagecoefficient() + company[i]->extrasalary();
		cout << company[i]->getID() << ": " << to_string(temp) <<endl;
		sum = sum + temp;
	}
	if (a[0] = 'T')
	{
		temp = company[i]->getbasicsalary() * company[i]->getwagecoefficient() + company[i]->extrasalary();
		cout << company[i]->getID() << ": " << to_string(temp) <<endl;
		sum = sum + temp;
	}
}
cout << "\n---------- total company salary ----------";
cout << endl << to_string(sum);
fclose(stdout);
FILE* OUTPUT1 =freopen("CON", "w", stdout);

return sum;

}

void Company::Search() {

int DPM;
cout << "\nInput Department: "; 
cin >> DPM;
FILE* OUTPUT=freopen("Search.txt", "w", stdout);
for (int i = 0; i < company.size(); i++)
{
	if (company[i]->getdepartment() == DPM) {
		company[i]->Output();
		cout <<", "<< company[i]->getaddress() << endl;
	}
}
fclose(stdout);


}
// hàm main
#include"Company.h"
int main() {


Company CL;

CL.input();
CL.Salary();
CL.Search();
CL.output();


}

lỗi ở khúc này:

int DPM;
cout << "\nInput Department: ";
cin >> DPM;

FILE* OUTPUT1 =freopen(“CON”, “w”, stdout); nhờ code này em mới xuất được cout ra màng hình

nhưng cin thì bị nó bỏ qua e tìm cách khắc phục nhưng không

Hình như ở đây bạn đang bị nhầm lẫn cách dùng freopen rồi thì phải. Code của bạn dùng cincout là nó đã mặc định nhập/xuất ra màn hình console rồi, không cần freopen làm gì cả.

Người ta sẽ dùng freopen để thay vì nhập/xuất từ console, sẽ chuyển sang dùng nhập xuất bằng file chứ.

1 Like

vâng ạ mình tưởng freopen như fstream đồ tiện hơn, thấy hỏi không ai trả lời mình có hỏi mọi người khác được hướng dẫn là sau khi sử dụng freopen thì phải hồi phục cout là freopen(“CON”,“w”,stdout) đúng rồi còn hồi phục cin thì phải freopen(“CON”,“r”,stdin) và cả cin.clear() nữa mà mình thiếu clear nên không cin được

Lần sau bạn cần đọc kỹ mô tả hàm, không có gì là “tưởng” đâu.

2 Likes

Bạn có thể tham khảo source code ở đây xem

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