为什么if语句不起作用

时间:2016-07-24 17:13:29

标签: c++ if-statement

我是编程的新手,无法解决这个问题,并且无处不在我能想到的答案。当function1if (m != 0 || 1)传递时,cin >> 1 function2中的if语句似乎无法读取。这是我的代码,任何帮助将不胜感激。

#include <iostream>

void function1(int i);

int main() {
    using namespace std;

    int i;

    function1(i);

return 0;
}
----------------------------------------------------------------------------
#include <iostream>

void function2();

void function1(int i) {
    using namespace std;
    if (i != 0 || 1 ) /* not working when the variable 'i' is passed from function2 */ {     
    cout << endl << "i != 0 || 1" << endl;
    function2();
    }
    else if (i == 0 || 1) {
        if (i == 0) {
            cout << endl << "m == 0" << endl;
        }
        else if (i == 1) {
            cout << endl << "m == 1" << endl;
        }
    }
}
----------------------------------------------------------------------------
#include <iostream>

void function1(int i);

void function2() {
    using namespace std;

    int i;

    cout << endl << "type 0 or 1" << endl;
    cin >> i;    /* type 1 or 0 in here */
    function1(i);
}

2 个答案:

答案 0 :(得分:3)

尝试更改此内容:

if (i != 0 || 1 )

对此:

if (i != 0 || i != 1 )  

答案 1 :(得分:3)

虽然user154248的答案(至少部分)是正确的,但您可能会对...原因感兴趣...

原因是operator!=具有更高的优先级(即之前评估过)operator||。所以你的if子句等同于if((i != 0) || 1)

此外,任何不等于0(null / 0)的值都将计算为true,如果在表达式中使用期望布尔参数,则得到if((i != 0) || true)。现在,i != 0评估的内容,整体表达式x || true将导致true

最后 - 我们回到了用户154248的回答......

但是,还有一个问题:i != 0 || i != 1也总是评估为true:如果i等于0,i != 1的计算结果为true,如果i等于1,i != 0就会这样做。 ..

您实际需要的是i != 0 && i != 1