2016-02-17 114 views
0

所以我的主代碼是一個菜單。ifstream在選擇菜單選項後不會打開文件

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); 
} 

輸入文件路徑後,並按下Enter鍵,它會說失敗,踢我的菜單。如果我把cin.sync();其中fin.sync是,它只會讓我循環進入文件路徑。請注意,它在菜單外工作。我將如何修復它,以便正確打開文件路徑而不會出現問題,以便它可以處理這些信息?

回答

0

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.fails,因爲它沒有初始化,刪除了這一行,它會正常工作。嘗試在fin.open();

+0

omg之後使用fin.fail()。我沒有意識到我打開之前檢查過。此外,我不得不扔了一個cin.clear和cin,無視它的工作。非常感謝。請問爲什麼你建議做一段時間而不是一段時間?我只是一名學生,所以我仍然在學習可能是最好的選擇。目前,我只是先輸入我知道的內容,如果不起作用,請修復。 – AznChris

+0

一個while循環在開始執行一個循環之前檢查一個條件,但是在這裏你需要一個人做一些事情,然後檢查這個值是否是特定的。做一些事情,而一個價值觀是真的,而一個價值觀是真的做一些事情是完全不同的,希望這可以解決這個問題,我也是一個學生,只是它的做法使得完美的兄弟:D –