2013-09-24 95 views
0

嘿我的代碼被卡住循環我的時候,當我輸入數字字母,它只是洪水我的輸出「無效的輸入,請再試一次。這只是一個簡單的菜單。當數字輸入時,代碼卡住循環

+0

你忘了問一個問題。 – crush

+4

數字字母? –

+3

您不檢查輸入是否成功。你必須始終做的事情。 'if(!(cin >> userOption)){/ *無效輸入,請勿使用userOption * /}' – jrok

回答

3

如果您輸入任何「無效」,例如從cin讀取將導致錯誤,您必須調用cin.clear()才能夠讀取更多輸入,否則操作符中的流將立即返回。

通常,在讀取用戶輸入時,您檢查cin的狀態並退出,或者在其無效時執行一些錯誤處理。此外,在一個失敗的輸入嘗試,被忽略導致錯誤仍然會坐在CIN,並且需要字符(例如,直到下一個換行符):

#include <iostream> 
#include <limits> 

int main() { 
    int userOption; 
    while(1) { 
     while(!(std::cin >> userOption)) { 
      std::cout << "Invalid input." << std::endl; 
      std::cin.clear(); 
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
     } 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
     std::cout << userOption << std::endl; 
    } 
    return 0; 
} 
+0

只是爲了記錄,std :: numeric_limits來自頭[limits](http://en.cppreference .com/w/cpp/header/limits) – streppel

+0

嘿,謝謝你,我該如何添加它,因此數字輸入最大值爲12. – Hayde

+0

@Hayde你可以在while循環後添加另一個檢查,或者將檢查添加到現有的while循環中('while(!(cin >> userOption)|| userOption> 12){') – zennehoy

0

問題是與以下代碼行,

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

當您輸入單個號碼時,您不必忽略任何其他字符。所以只需刪除上面的代碼行來糾正你的程序。

+0

這取決於你想要的東西:如果你想把輸入'1iosdf'解析爲1,其餘的被忽略,那麼忽略剩下的行就是要走的路。 – zennehoy