您好亲爱的程序员, 我一段时间以来一直在处理一段代码,但我似乎无法解决这个问题,我一直在努力检查具有特定数字的输入,但到目前为止最终不起作用,即使按下2,3或4号,弹出错误信息,然后我转到我的if else状态。这里是代码,number_of_bedrooms是一个整数。
out << "Number Of Bedrooms: (Limited To 2,3, and 4 Only)" << endl;
if (isNumber(number_of_bedrooms) == false ) {
cout << "Please Do Enter Numbers Only" << endl;
cin.clear();
}
else if (number_of_bedrooms != '2' || number_of_bedrooms != '3' || number_of_bedrooms != '4') {
cout << "Numbers Are Only Limited To 2,3, And 4" << endl;
cin.clear();
}
和功能:
bool isNumber(int a)
{
if (std::cin >> a)
{
return true;
}
else
{
return false;
}
}
检查数字的第一个验证工作正常,但第二个验证没有,我的猜测是系统在该布尔函数之后没有捕获输入的数据。如果这是原因,解决方案是什么?!!
答案 0 :(得分:1)
将您的||
更改为&&
,还需要与int
进行比较而不是char
else if (number_of_bedrooms != 2 && number_of_bedrooms != 3 && number_of_bedrooms != 4)
请注意,解决此类问题的更一般方法(例如,如果您的列表需要更长时间)将会执行类似
的操作std::set<int> const allowableBedrooms = {2,3,4};
else if (allowableBedrooms.find(number_of_bedrooms) == allowableBedrooms.end())
{
// Warn user here
}
答案 1 :(得分:0)
由于你的目标条件是连续的,我会使用这样的东西:
else if ( number_of_bedrooms < 2 || number_of_bedrooms > 4 ) {
cout << "Numbers Are Only Limited To 2,3, And 4" << endl;
cin.clear();
}
如果您想要更改它,这非常清晰且易于管理。如果你想列举你需要使用的所有东西&amp;&amp;而不是||既然你想要它不是2而不是3而不是4来触发问题。
您的代码中的另一个问题是您通过将数字放在单引号中来比较字符。由于这些是整数,因此您不应该在引号中使用它们。
答案 2 :(得分:0)
你必须改变你的功能,以便从本地函数中进行更改,如下所示:
bool isNumber(int * a)
{
if (std::cin >> * a)
{
return true;
}
else
{
return false;
}
}
然后使用number_of_bedrooms的地址调用函数,如下所示:
out << "Number Of Bedrooms: (Limited To 2,3, and 4 Only)" << endl;
if (isNumber(&number_of_bedrooms) == false ) {
cout << "Please Do Enter Numbers Only" << endl;
cin.clear();
}
else if (number_of_bedrooms < 2 || number_of_bedrooms > 4) {
cout << "Numbers Are Only Limited To 2,3, And 4" << endl;
cin.clear();
}
检查上面的代码,因为我取消了'',这意味着你将number_of_bedrooms(int)与'2'(char)进行比较,所以它总是正确的。 我写的条件会更好,因为你正在考虑一个数字间隔,如果你正在考虑具体的数字,你可以留下你的条件,但你应该改变&amp;&amp;的逻辑运算符。和另一个链!=条件