我无法仅为数字输入进行输入验证。下面是我的代码,它每次输入一个字母时都会循环,输入错误的数字不会。它循环“无效输入,请再试一次。”唯一的选择是关闭它。我该如何解决这个问题?
while (!(cin >> userOption) || userOption < 1 || userOption > 12) {
cout << "Invalid Input, please try again." << endl;
cin >> userOption;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
答案 0 :(得分:3)
您不希望在cin >> userOption
条件和循环内部都while
,因为每个循环会产生两个输入。
while
条件下的那个应该足够了。
答案 1 :(得分:0)
如果结果正常,请尝试这样做以摆脱循环:
while (true) {
if (!(cin >> userOption) || (userOption_tmp < 1) || (userOption_tmp > 12)) {
cout << "Invalid Input, please try again." << endl;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
}
else {
break;
}
//this is looping when letter inputed
}
答案 2 :(得分:0)
首先初始化userOption
:
unsigned int userOption = 0;
然后这样:
while ( userOption < 1 || userOption > 12 /* or even true, like Atle suggested */)
{
cin >> userOption;
if( !cin || userOption < 1 || userOption > 12 )
{
cout << "Invalid Input, please try again." << endl;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
continue;
}
else
break; //this is looping when letter inputed
}