选择菜单选项后 ifstream 不会打开文件
ifstream won't open file after selecting menu choice
所以我的主要代码是一个菜单。
BankAccount BA;
ifstream fin;
int UserAction = -1;
while (UserAction != 0) {
cout << "menu here";
cin >> UserAction;
if (UserAction == 1)
BA.getInstance(BA); //Input by keyboard. Works fine.
if (UserAction == 2)
BA.getInstance(BA, fin); //Input by file.
}
如果我选择选项 #2,它将执行以下代码:
void BankAccount::getInstance(BankAccount &BA, ifstream &fin) {
string actN, fname, lname, InputFileName;
double bal;
fin.sync();
cout << "Please enter input file path: ";
getline(cin, InputFileName);
if (fin.fail())
cout << "failed";
else {
fin.open(InputFileName.c_str());
BA.getInstance(BA, fin);
}
fin >> actN;
fin >> lname;
fin >> fname;
fin >> bal;
BA = BankAccount(actN, lname, fname, bal);
}
输入文件路径后,按回车,提示失败并跳转到菜单。如果我把 cin.sync(); fin.sync 在哪里,它只会让我循环输入文件路径。请注意,它在菜单之外工作。我该如何修复它才能正确打开文件路径而不会出现问题,以便它可以处理信息?
1 - 将您的主要代码更改为 do-while
,我想知道为什么人们会在这种情况下选择 while 循环。
do{
cout << "menu here";
cin >> UserAction;
if (UserAction == 1)
BA.getInstance(BA); //Input by keyboard. Works fine.
if (UserAction == 2)
BA.getInstance(BA, fin); //Input by file.
} while(UserAction!=0);
2 - fin.fails 因为它没有被初始化,删除那行,它会正常工作。尝试在 fin.open();
之后使用 fin.fail()
所以我的主要代码是一个菜单。
BankAccount BA;
ifstream fin;
int UserAction = -1;
while (UserAction != 0) {
cout << "menu here";
cin >> UserAction;
if (UserAction == 1)
BA.getInstance(BA); //Input by keyboard. Works fine.
if (UserAction == 2)
BA.getInstance(BA, fin); //Input by file.
}
如果我选择选项 #2,它将执行以下代码:
void BankAccount::getInstance(BankAccount &BA, ifstream &fin) {
string actN, fname, lname, InputFileName;
double bal;
fin.sync();
cout << "Please enter input file path: ";
getline(cin, InputFileName);
if (fin.fail())
cout << "failed";
else {
fin.open(InputFileName.c_str());
BA.getInstance(BA, fin);
}
fin >> actN;
fin >> lname;
fin >> fname;
fin >> bal;
BA = BankAccount(actN, lname, fname, bal);
}
输入文件路径后,按回车,提示失败并跳转到菜单。如果我把 cin.sync(); fin.sync 在哪里,它只会让我循环输入文件路径。请注意,它在菜单之外工作。我该如何修复它才能正确打开文件路径而不会出现问题,以便它可以处理信息?
1 - 将您的主要代码更改为 do-while
,我想知道为什么人们会在这种情况下选择 while 循环。
do{
cout << "menu here";
cin >> UserAction;
if (UserAction == 1)
BA.getInstance(BA); //Input by keyboard. Works fine.
if (UserAction == 2)
BA.getInstance(BA, fin); //Input by file.
} while(UserAction!=0);
2 - fin.fails 因为它没有被初始化,删除那行,它会正常工作。尝试在 fin.open();
fin.fail()