【问题标题】:C++: Infinite loops from input validation [duplicate]C ++:来自输入验证的无限循环[重复]
【发布时间】:2021-01-25 00:58:57
【问题描述】:

所以我有这种方法,我必须输入一个值(一个值大于 1 的整数),如果看到给定的值在外部,则循环回用户初始化以上参数。

我遇到的问题是当 letter 输入到控制台时,程序要么将该字母解释为 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);
}

上面是植入了虚拟值的程序的样子。欢迎任何建议,在此先感谢。

【问题讨论】:

    标签: c++ validation infinite-loop


    【解决方案1】:

    在您的代码中发生的情况是,每当您输入一个字母时,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;
      }
    

    【讨论】:

      【解决方案2】:

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

      while(condition)
      {
          statement(s)
      }
      

      或者你可以这样做

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

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

      【讨论】:

      • 在我的主要方法中,变量是通过引用传递的,因此该部分应该没问题。另外,在语法方面,我的 do while 循环的“do”部分被切断了,但它确实存在
      • 我已经更新了这个问题,这样代码的阅读就不会那么混乱了。
      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 2019-06-15
      • 2012-03-06
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多