简化if else用户输入验证

时间:2011-10-11 23:16:17

标签: c++ input validation

这可以完成我需要它做的工作,但我想知道是否有更简单/更有效的方法来完成同样的事情。用户输入两个数字,它们需要介于0和50之间,如果它不在所需范围内,则结束编程

cout << "Enter the pixel coordinate (x, y): ";
cin >> usrInput1 >> userInput2;
if  (usrInput1 > 50)
{
    cout << "ERROR! 1" << endl;
    return 0;
}
else if (usrInput1 < 0)
{
    cout << "ERROR! 2" << endl;         
    return 0;
}
else if (usrInput2 > 50)
{
    cout << "ERROR! 3" << endl;
    return 0;
}
else if (usrInput2 < 0)
{
    cout << "ERROR! 4" << endl;
    return 0;
}
else
{
    cout << "Success" << endl;
    xvar = usrInput1 + usrInput2;
}

我试图做像

这样的事情
if(! 0 > userInput1 || userInput2 > 99)

但显然没有成功..

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

cout << "Enter the pixel coordinate (x, y): ";
cin >> usrInput1 >> userInput2;
if  ( (usrInput1 > 50) || (usrInput1 < 0)  ||
      (usrInput2 > 50) || (usrInput2 < 0) )
{
    cout << "ERROR!" << endl;
    return 0;
}
cout << "Success" << endl;
xvar = usrInput1 + usrInput2;

如果您真的想要可以进一步合并它:

if  ((std::max(usrInput1,usrInput2) > 50) 
   || std::min(usrInput1,usrInput2) < 0))
{ 
     ...

在这种情况下,我宁愿有一个辅助函数

bool isValid(int i) { return (i>=0) && (i<=50); }

// ...
if (isValid(usrInput1) && isValid(usrInput2))
    ...

编辑考虑检查输入操作 - 这在OP中缺失:

<子>

if (!(cin >> usrInput1 >> userInput2))
{
     std::cerr << "input error" << std::endl;
}
if  ( (usrInput1 > 50) || (usrInput1 < 0)  ||
      (usrInput2 > 50) || (usrInput2 < 0) )
{
     std::cerr << "value out of range" << std::endl;
}

答案 1 :(得分:0)

我想我会把大部分内容转移到一个函数中:

bool check_range(int input, 
                  int lower, int upper, 
                  std::string const &too_low, std::string const &too_high) 
{
    if (input < lower) {
        std::cerr << too_low << "\n";
        return false;
    }
    if (input > upper) {
        std::cerr << too_high << "\n";
        return false;
    }
    return true;
}

然后你会用这样的东西:

if (check_range(usrInput1, 0, 50, "Error 1", "Error 2") &&
    check_range(usrInput2, 0, 50, "Error 3", "Error 4")
{
    // Both values are good
}

我应该补充一点,我对此并不完全满意。该功能确实体现了两个责任,我宁愿分开(检查范围并报告错误,如果超出范围)。