选择菜单选项后 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()