使用布尔值验证整数输入

时间:2020-07-27 18:34:21

标签: c++ if-statement while-loop do-while

在我的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循环继续进行直到输入有效为止。

我正在处理的问题要求最大和最小步长,因为它们都存在类似的问题,因此我试图简化它并忘记了一些修改。

2 个答案:

答案 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条件似乎与循环内的检查不匹配。当step910时会发生什么?您应该与循环内的检查保持一致。

答案 1 :(得分:0)

您可以使用!运算符。

例如:

if ( !(std::cin >> steps) )
        {
          std::cin.clear();
          std::cin.ignore();
          std::cout << "Incorrect entry. Try again: ";
        }

还考虑不使用using namespace std;