当我按一个字母时,为什么会出现无限循环?如何更改错误检查?

时间:2016-09-30 21:54:02

标签: c++ error-handling error-checking

为什么在按一个字母时会出现无限循环?如何在错误检查时阻止我的代码进入无限循环?

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

2 个答案:

答案 0 :(得分:1)

因为std :: cin是类型安全的,所以它知道字母不是&#34; int number&#34;的有效输入。它在std :: cin中引发错误标志,任何后续操作都将失败并立即返回。

在继续操作之前,您需要检查错误状态并清除任何错误标记。

查看现有帖子Why do I get an infinite loop if I enter a letter rather than a number?

答案 1 :(得分:0)

非常感谢y&#39;所有人。我最终选择了这个。

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