如果语句返回错误的输出C ++

时间:2014-08-07 07:41:30

标签: c++

我有一个if字段包含一个简单的表达式,我无法找出导致问题的原因,无论使用什么数字都会产生语句

if (pos != string::npos)
{
    mystring.erase (0,10);
    {
        int numb;
        istringstream(mystring)>>numb;
        cout << numb << endl; //to check the numb integer (its equals 2)
        if (numb != 1,2,3)
        {
            cout << "Please attach a valid priority to this ticket" << endl;
        }        
        else
            cout << "nice one" << endl; 

出于某种原因(我无法弄清楚),该程序返回&#34;请为此票证附加有效优先级&#34;不管麻木是什么。

非常感谢帮助!

3 个答案:

答案 0 :(得分:5)

if (numb != 1, 2, 3) 

应该是:

if (numb != 1 && numb != 2 && numb != 3)

你写的内容被解析为:

if ((numb != 1), 2, 3)

这使用逗号运算符,它计算每个参数并返回第二个参数。所以它相当于:

if (3)

答案 1 :(得分:1)

// read a ~ b as "a is equivalent to b"
(numb != 1,2,3) ~ ((numb != 1),2,3) ~ (2,3) ~ 3

因此,您的情况始终如此。您需要将逻辑结果(布尔值)与&&(和)或||(或)结合起来,例如:

if (numb < 1 || numb > 3)

答案 2 :(得分:1)

您可能收到了编译器的警告......如果不是,请检查警告参数。 逗号运算符丢弃先前操作数的结果,并仅返回最后一个操作数。 在这种情况下,if与:

相同
if (3)

当然,这不是你想要的。 在您的情况下,如果您只想检查整数是否不在1到3区间内,您可以这样检查:

if (num < 1 || num > 3)