输入验证(Validating input)

2019-10-21 03:11发布

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 >> menuChoice)被调用,即使它是有效的输入(我会用另一个循环,以确保它在这个范围内,但只要它是应该被罚款的int , 那正是我所想。

我甚至尝试了

if (menuChoice == 0)
   menuchoice = 6;

只是while循环之前,但无济于事。

任何援助?

Answer 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循环2 - 确保正确的范围内,而环3 - 捕捉任何字符串输入,用户可以输入一个第二时间



Answer 2:

原来它只是

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

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



文章来源: Validating input