2016-09-30 34 views
0

當我按下一個字母時,爲什麼會出現無限循環?如何防止錯誤檢查時我的代碼進入無限循環?當我按下一個字母時,爲什麼會出現無限循環?如何更改錯誤檢查?

#include <iostream> 
using namespace std; 

int main() 
{ 
    int number; 
    cout << "Enter a number in the range 1-100: "; 
    cin >> number; 

    while (number > 1 || number < 100) 
    { 
     cout << "ERROR: Enter a value in the range 1-100: "; 
     cin >> number; 

    } 
    return 0; 
} 
+0

我懶得找到一個很好的重複(在stackoverflow.com上有很多這裏,甚至更廣泛的互聯網),但問題的要點是,當輸入運算符無法將輸入解析爲數字,它將輸入留在緩衝區中,它不會刪除任何內容。因此,每次在循環中都會一遍又一遍地讀取相同的輸入。閱讀[ignore]函數(http://en.cppreference.com/w/cpp/io/basic_istream/ignore)來幫助你。 –

+0

想想while語句中的條件在做什麼。 – 1201ProgramAlarm

+0

另外請注意,如果您使用的是較早的編譯器或者在C++ 11之前的模式下編譯,那麼您將會有*未定義的行爲*,因爲在非法輸入時'number'不會被修改。並且由於它不是初始化的,它將會有一個* indeterminate *值,並且循環中的比較會給你UB。 –

回答

1

因爲std :: cin是類型安全的,它知道一個字母不是「int number」的有效輸入。它在std :: cin中引發一個錯誤標誌,任何後續操作都將失敗並立即返回。

在繼續之前,您需要檢查錯誤狀態並清除任何錯誤標誌。

查看現有職位Why do I get an infinite loop if I enter a letter rather than a number?

+0

謝謝! @TanguyFautré –

0

非常感謝你們。我結束了這個。

while (!(cin >> number)) 
{ 
    cout << "ERROR: Enter a value in the range 1-100: "; 

    //to clear input stream 
    cin.clear(); 

    //to discard previous input 
    cin.ignore(1200, '\n'); 

    cin >> number; 
} 
相關問題