當我按下一個字母時,爲什麼會出現無限循環?如何防止錯誤檢查時我的代碼進入無限循環?當我按下一個字母時,爲什麼會出現無限循環?如何更改錯誤檢查?
#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;
}
我懶得找到一個很好的重複(在stackoverflow.com上有很多這裏,甚至更廣泛的互聯網),但問題的要點是,當輸入運算符無法將輸入解析爲數字,它將輸入留在緩衝區中,它不會刪除任何內容。因此,每次在循環中都會一遍又一遍地讀取相同的輸入。閱讀[ignore]函數(http://en.cppreference.com/w/cpp/io/basic_istream/ignore)來幫助你。 –
想想while語句中的條件在做什麼。 – 1201ProgramAlarm
另外請注意,如果您使用的是較早的編譯器或者在C++ 11之前的模式下編譯,那麼您將會有*未定義的行爲*,因爲在非法輸入時'number'不會被修改。並且由於它不是初始化的,它將會有一個* indeterminate *值,並且循環中的比較會給你UB。 –