我想从用户那里获得输入并将其验证为整数,但是当程序中的字母或单词结束时,我的方法似乎失败了。任何人都可以快速轻松地解决此问题吗?
int getUserInput(){
int maxNumber;
// the user input a valid integer, process it
if (cin >> maxNumber)
{
if (maxNumber>1 || maxNumber<=100) {
return maxNumber;
}
} else{
getUserInput();
}
}
答案 0 :(得分:1)
如果用户未键入整数,则您的代码将进入一个无限递归循环,该循环无法从中恢复,最终导致调用堆栈溢出。
请尝试以下类似操作:
int getUserInput()
{
int number;
cout << "Enter a number between 1 - 100: ";
do
{
// if the user input a valid integer, process it
if (cin >> number)
{
if (number >= 1 && number <= 100)
break;
cout << "Number out of range, try again: ";
}
else
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input, try again: ";
}
}
while (true);
return number;
}
答案 1 :(得分:1)
您没有说明您希望输入在什么范围内,因此请进行相应调整。
int getUserInput() {
int maxNumber;
while (!(cin >> maxNumber) || maxNumber <= 1 || 100 < maxNumber) {
if (cin)
cout << "number out of range, try again: ";
else {
cin.clear();
cin.ignore(numeric_limits<int>::max(), '\n');
cout << "Not a number, please try again : ";
}
}
return maxNumber;
}