为什么a = 4被评估为真,但b = 0在if条件下被评估为假?

时间:2015-03-30 18:35:03

标签: c

为什么第一个条件a = 4被视为真,而b = 0在下面的if条件中被视为假?

#include <stdio.h>
int main()
{
  int a,b;
  if(a=4)
    printf("a=4 --> true");
  else
    printf("a=4 --> false");

  if(b=0)
    printf("\nb=0 --> true");
  else
    printf("\nb=0 --> false");

  printf("\n");
}

输出:

a=4 --> true  
b=0 --> false

5 个答案:

答案 0 :(得分:5)

在C和C ++语言中,任何非零值都被视为true。在if条件下,您要将40分配给ab,从而导致表达式a = 4b = 0的值分别为40

答案 1 :(得分:3)

作业表达

x = n

评估分配给x的值。因此a = 4评估为4b = 0评估为0。在C和C ++中,非零值为true,零值为false。

答案 2 :(得分:1)

因为你正在测试的是,如果b等于0则不是。如果你想检查你应该写:

b=0; // assign the value

if(b==0) { // check if b is 0
}

你正在做的是将0分配给b然后条件为真是b不是真的。换句话说,你在做什么类似于:

b=0;
if(b) {
}

当然这个if条件不会进入,因为b是0,这与False相同。

答案 3 :(得分:0)

要比较值,请使用===是一个赋值运算符,它返回您指定的值。然后,每个不等于0的整数值都被视为布尔值true

答案 4 :(得分:0)

根据C标准(6.8.4.1 if语句)

  

2在两种形式中,如果表达式,则执行第一个子语句   比较不等于0.在else形式中,第二个子语句是   如果表达式比较等于0,则执行。

因此在此代码段中

  if(a=4)
    printf("a=4 --> true");
  else
    printf("a=4 --> false");

表达式a = 4不等于0.因此执行if的第一个子语句。

在此代码段中

  if(b=0)
    printf("\nb=0 --> true");
  else
    printf("\nb=0 --> false");

表达式b = 0等于0.因此执行if的第二个子语句(即对应于else)。