IFstream在选择菜单选项后无法打开文件

ifstream won't open file after selecting menu choice

本文关键字:文件 选择 菜单 选项 IFstream      更新时间:2023-10-16

所以我的主要代码是一个菜单。

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 , idk 为什么人们在这种情况下选择 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.failed,因为它没有初始化,删除该行,它将正常工作。 尝试在fin.open();后使用fin.fail()