验证输入
问题描述:
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,它应该没问题,这就是我的想法。验证输入
我甚至只是while循环之前,但无济于事尝试了
if (menuChoice == 0)
menuchoice = 6;
。
任何援助?
答
我期待继续菜单和验证部分分开(目前它的功能,但我会改变他们我未来到班级)。
验证部分云:
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 - 确保正确范围 while循环3 - 捕捉任何字符串输入,用户可以输入一个第二时间
答
原来它仅仅是
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;
}
所需要(以及代码等的其余部分)