在我的C ++代码中,我想使用do while循环将我的用户输入验证为介于1,10之间的整数。我能够验证超出范围的整数。但是,如果用户输入浮点数或字母,它将变成无限循环。我的想法是在我的while循环中添加一个条件,以确保输入不是整数来继续要求输入。 大写字母是我遇到的麻烦。
#include <iostream>
using namespace std;
int main(){
cout << "Welcome, ";
int steps;
int count=0;
do{
cout << "How many? \n";
cin >> steps;
IF (STEPS IS NOT INTEGER==TRUE){
COUNT=1;
}
if (steps <1)
{
cout << "not enough...\n";
}
if (steps > 10){
cout << "too many steps.\n Please pick a lower number of steps.\n\n";
}
} while (steps < 1|| steps >10 || COUNT==1);
//doing stuff with valid input
return 0;
}
本质上,我试图添加另一个仅返回布尔值的条件。如果布尔值表示输入无效,则它会重新分配count,以确保do while循环继续进行直到输入有效为止。
我正在处理的问题要求最大和最小步长,因为它们都存在类似的问题,因此我试图简化它并忘记了一些修改。
答案 0 :(得分:2)
您可以检查输入是否失败,即用户输入的内容无法被int
读取,如下所示:
if (cin.fail()) { // in place of IF (STEPS IS NOT INTEGER==TRUE)
cin.clear();
cin.ignore();
cout << "not an integer, try again\n";
continue;
}
这避免了使用COUNT
变量。
此外,您的while
条件似乎与循环内的检查不匹配。当step
是9
或10
时会发生什么?您应该与循环内的检查保持一致。
答案 1 :(得分:0)
您可以使用!
运算符。
例如:
if ( !(std::cin >> steps) )
{
std::cin.clear();
std::cin.ignore();
std::cout << "Incorrect entry. Try again: ";
}
还考虑不使用using namespace std;
。