验证输入

时间:2014-10-09 18:10:49

标签: c++ validation input

cin >> menuChoice;

while (!(cin >> menuChoice))
 {
   cout << "invalid selection, please enter a number from the menu  1" << endl;
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 }

我想'捕获'一个字符串,以便程序不会崩溃或进入连续循环,所以我进入上面的while循环。看起来不错。这是直到我输入0进入菜单选项 - !(cin&gt;&gt; menuChoice)被调用,即使它是有效的输入(我将使用另一个循环来确保它在范围内,但只要它是一个int它应该没关系,这就是我的想法。

我甚至试过了

if (menuChoice == 0)
   menuchoice = 6;

就在while循环之前,但无济于事。

有任何帮助吗?

2 个答案:

答案 0 :(得分:1)

我希望将菜单和验证部分分开(目前它的功能,但我将来会将它们更改为类)。

验证部分:

while (!(cin >> menuChoice))
{
   cout << "invalid selection, please enter a number from the menu  1" << endl;
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

while (menuChoice < 1 || menuChoice > 4)
{
    cout << "invalid selection, please enter a number from the menu  2" << endl;
    cin >> menuChoice;  //here is where there is a problem

    while (!(cin >> menuChoice))
    {
        cout << "invalid selection, please enter a number from the menu 3" << endl;
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

}

while循环1 - 捕获任何初始字符串输入 while loop 2 - 确保正确的范围 while loop 3 - 捕获任何字符串输入,用户可以再次输入

答案 1 :(得分:0)

结果只是

 cin>> menuChoice;

 while (!cin)
  {
   cout << "invalid selection, please enter a number from the menu  1" << endl;
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
   cin>> menuChoice;
  }
需要

(以及代码的其余部分等)