为什么第一个条件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
答案 0 :(得分:5)
在C和C ++语言中,任何非零值都被视为true
。在if
条件下,您要将4
和0
分配给a
和b
,从而导致表达式a = 4
和b = 0
的值分别为4
和0
。
答案 1 :(得分:3)
作业表达
x = n
评估分配给x
的值。因此a = 4
评估为4
,b = 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)。