这可以完成我需要它做的工作,但我想知道是否有更简单/更有效的方法来完成同样的事情。用户输入两个数字,它们需要介于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)
但显然没有成功..
感谢您的帮助
答案 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
}
我应该补充一点,我对此并不完全满意。该功能确实体现了两个责任,我宁愿分开(检查范围并报告错误,如果超出范围)。