我正在开发一个程序,通过输入1-3(4到退出)中的整数来提示用户从3个不同的选项中进行选择。我需要编写一个验证输入是整数的代码,如果它不是整数,则重新调用它们。这是我的代码的基本概念(整个发布时间过长)。
do
{
cout << "Menu: Please select one of the following options:" << endl;
cout << " 1 - Drop a single chip into one slot." << endl;
cout << " 2 - Drop multiple chips into one slot." << endl;
cout << " 3 - Drop 5 chips into each slot." << endl;
cout << " 4 - Quit the program." << endl;
cout << "Enter your selection now: ";
cin >> first_input;
}while (first_input!=4)
然后我有多个if语句根据用户选择的选项执行表达式。我还提示他们稍后在代码中输入其他整数值。
如果用户输入无法输入整数而是输入字符,如何将用户发送回菜单?约束:无法使用continue
或break
提前致谢。
答案 0 :(得分:1)
如果你想在非整数输入的情况下回到起点,也许这样的东西会起作用吗?
// Insert after "cin >> first_input;"
if (cin.fail()) {
// Handle non-int value.
// Clear error flag.
cin.clear();
// Empty buffer up to next newline.
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// Complain & restart.
cout << "Invalid input. Please try again." << endl;
continue;
}
这样做是清除错误标志,清除缓冲区,然后返回到开始。 cin.ignore()
未明确需要传递std::numeric_limits<std::streamsize>::max()
作为其第一个参数;但是,如果出现错误,我更愿意这样做,以确保错误的输入消失。请注意,std::numeric_limits
是在标准标题<limits>
中定义的,需要将其包含在内。
答案 1 :(得分:0)
您正在寻找continue
关键字。
答案 2 :(得分:0)
do
{
cout << "Menu: Please select one of the following options:" << endl;
cout << " 1 - Drop a single chip into one slot." << endl;
cout << " 2 - Drop multiple chips into one slot." << endl;
cout << " 3 - Drop 5 chips into each slot." << endl;
cout << " 4 - Quit the program." << endl;
cout << "Enter your selection now: ";
cin >> first_input;
//lets say if user enters value out of range. then want to show menu again.
if(first_input > 4) {
cout << "Invalid input "<<endl;
continue;
}
// you can do other stuff here.
// ...
}while (first_input!=4)
答案 3 :(得分:0)
您可以尝试使用 转到标签。
do{
label:
// your code
if(check) goto label;
}while(check);
do{
label:
// your code
if(check) goto label;
}while(check);