C++:来自输入验证的无限循环

C++: Infinite loops from input validation

所以我有这个方法,我必须接受一个值(一个值 大于 1 的整数),如果给定的值,则循环回到用户初始化被认为超出了上述参数。

我遇到的问题是,当 字母 被输入到控制台时,程序要么将字母解释为 0(这是用于退出程序的特殊数字) , 或者(当我试图给出一个虚拟值时)将进入一个无限循环,在这个循环中(我相信)程序只是不断地输入虚拟值而不是从用户那里接收新的输入。

void input(int &n)
{
   do
   {  //prompt
      cout << "Input an integer number greater than 1:" << endl;

      //initialization and check for non-int value
      if (!(cin >> n))
      {
         cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
         n = 1;
      }

      //checks for special int values
      if (n == 0)
         exit(0);
      else if (n < 1)
         cout << "INPUT VALUE OF " << n << " IS NOT ALLOWED, TRY AGAIN." << endl;

   } while (n <= 1);
}

上面是植入了虚拟值的程序的样子。欢迎任何建议,提前致谢。

你声明变量了吗?我的意思是给定的代码将显示错误,因为您没有声明 'n' 是一个整数。 还, 我认为您使用的语法是错误的。你可以做

while(condition)
{
    statement(s)
}

或者你可以做

do{
    statement(s)
}
while( condition );

据我所知,上面给出的代码应该显示错误。

您的代码中发生的事情是,每当您输入一个字母时,cin 都会为后续输入保持其无效状态,因此您必须首先清除它并删除错误的输入。所以你可以这样做:

if (!(cin >> n)) {
    cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
    cin.clear();
    while(cin.get() != '\n');
    n = 1;
  }