C ++检查特定号码

时间:2015-01-15 14:32:46

标签: c++

您好亲爱的程序员, 我一段时间以来一直在处理一段代码,但我似乎无法解决这个问题,我一直在努力检查具有特定数字的输入,但到目前为止最终不起作用,即使按下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;
    }
}

检查数字的第一个验证工作正常,但第二个验证没有,我的猜测是系统在该布尔函数之后没有捕获输入的数据。如果这是原因,解决方案是什么?!!

3 个答案:

答案 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;的逻辑运算符。和另一个链!=条件