2014-10-09 218 views
1
cin >> menuChoice; 

while (!(cin >> menuChoice)) 
{ 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

我想'捕捉'一個字符串,以便程序不會崩潰或進入連續循環,因此我輸入了上面的while循環。看起來不錯。直到我輸入0進入菜單選項 - !(cin >> menuChoice)被調用,即使它是有效的輸入(我將使用另一個循環來確保它在範圍內,但只要它是一個int,它應該沒問題,這就是我的想法。驗證輸入

我甚至只是while循環之前,但無濟於事嘗試了

if (menuChoice == 0) 
    menuchoice = 6; 

任何援助?

回答

1

我期待繼續菜單和驗證部分分開(目前它的功能,但我會改變他們我未來到班級)。

驗證部分雲:

while (!(cin >> menuChoice)) 
{ 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

while (menuChoice < 1 || menuChoice > 4) 
{ 
    cout << "invalid selection, please enter a number from the menu 2" << endl; 
    cin >> menuChoice; //here is where there is a problem 

    while (!(cin >> menuChoice)) 
    { 
     cout << "invalid selection, please enter a number from the menu 3" << endl; 
     cin.clear(); 
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 

} 

while循環1 - 捕捉任何初始字符串輸入 while循環2 - 確保正確範圍 while循環3 - 捕捉任何字符串輸入,用戶可以輸入一個第二時間

0

原來它僅僅是

cin>> menuChoice; 

while (!cin) 
    { 
    cout << "invalid selection, please enter a number from the menu 1" << endl; 
    cin.clear(); 
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    cin>> menuChoice; 
    } 

所需要(以及代碼等的其餘部分)