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+
Lỗi nhập xuất khi sử dụng freopen
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 cin
và cout
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ứ.
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.