检查有效输入

时间:2010-11-14 18:21:41

标签: c++ loops user-input

我目前正在开发一个c ++程序,我想查看用户输入的输入是否有效。目前,如果用户输入正确的输入,或者如果用户输入一个小的错误数字,我的代码将起作用,我的程序将告诉用户输入无效。现在我的问题是,当用户输入多个字符/字母或大数字,其中包含9位或更多位数时,我的程序进入无限循环,给出错误消息。以下是我的代码:

//for (;;)
    while (flag== false)
    {
        cin >> Input;
        if (Input <= choice.size()-1)
        {
            flag = true;
    //  break;
        }

        else
        {
            cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n";
            userInput = 0;
        }
    }

正如你所看到的,我也试过做一个infinate for循环,但它给了我相同的结果。 在我的代码中,我正在向屏幕打印矢量。基本上是用户选择向量值来使用它。

我愿意接受任何建议。感谢

1 个答案:

答案 0 :(得分:2)

如果用户键入了无法读入Input的内容(从代码中不清楚Input是什么类型),那么输入将卡在输入流和每次迭代中在清除流之前,循环将继续无法读入输入。

您需要清除流标记,并在每次读取失败后删除流中正在等待的任何错误输入。尝试这样的事情:

while(!(cin >> Input) || Input <= choice.size()-1)
{
  cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n";
  cin.clear(); // Clears the input stream fail flag
  cin.ignore(100, '\n'); // Ignores any characters left in the stream
}