为什么以下程序打印“是”而不是“否”?

时间:2015-07-26 05:48:54

标签: c boolean

为什么以下程序打印“是”而不是“否”?

没有变量初始化为2。

    bool hello = 0;
    int a = 1;
    int b = 3;
    int c = 4;
    int d = 5;

    if (a || b || c || d == 2) {
        hello = 1;
    }

    if (hello == 1) {
        printf("Yes");
    }

    if (hello == 0) {
        printf("No");
    }

    return 0;
}

5 个答案:

答案 0 :(得分:7)

声明

if (a || b || c || d == 2)

相当于:

if (a != 0 || b != 0 || c != 0 || d == 2)

相等比较不会自动分布在所有变量上。如果你想这样做,你需要明确地执行所有比较:

if (a == 2 || b == 2 || c ==2 || d == 2)

答案 1 :(得分:4)

表达式(a || b || c || d == 2)评估为true,因为它将a,b,c视为布尔值,并且任何非零整数都为真。

答案 2 :(得分:3)

你在表达式中给出了逻辑运算符它意味着如果非零值出现则表达式为真。然后设置hello = 1并在下一个f语句中输出YES

答案 3 :(得分:1)

您只需符合逻辑表达式OR短路行为。

逻辑 OR ||的{​​{3}}是从左到右。

所以在下面的表达式中:

left || right 

如果left = trueright将永远不会被执行(短路)。在您的代码中完全相同。

如您所知,任何非零值在C中被视为true,因此,a 1trueif (a || b || c || d == 2) if (true || bla bla bla) //rights are not even checked! if (true) hello = 1; 。所以,看看:

if

多田!所以节目打印"是"!

  

没有变量初始化为2。

当然可以!但是你的if (a == 2 || b == 2 || c ==2 || d == 2) { //... 条件不会检查。为此,请尝试以下方法:

require(rgl)
 open3d()
#------
NSOpenGL 
      11 
> lines3d( x=out[, 2]/diff(range(out[, 2])),  y=out[, 3]/diff(range(out[, 3])), z=out[, 4]/diff(range(out[, 4])))
> axes3d()
> range(out[, 2])
[1] -599.9068  309.3532
> range(out[, 1])
[1]   0 100
> range(out[, 4])
[1] -18.02914  23.64377
> range(out[, 3])
[1]   0.6000 165.0494
> rgl.snapshot("equil.png")

答案 4 :(得分:0)

因为如果判断num不为零,那么认为这是真的。所以你的代码

 if (a || b || c || d == 2)
 like 
 if ( true || true || true || false)

结果是真的,程序打印“是”