C中的if-else条件

xjreopfe  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(98)

在C语言中,如果将x=0置于if-else条件下,结果是什么?如果表示false或如果此赋值完成,则表示true

我的同事编写代码如下:

if(condition = 0)
{
    //do process A
}
else
{
    // do process B
}

字符串
显然,这段代码是错误的,我知道它应该是condition == 0((condition=foo()) == 0),但我的假设是程序应该总是做进程A,因为我认为if(condition = 0)应该总是返回true,因为这是设置值0到变量condition,这个设置进程应该是true。然而,程序总是做进程B,这意味着if使用变量condition的值,我的假设是错误的。
然后我又做了一个测试代码:

if(condition = 2) //or other none-zero value
{
    //do process A
}
else
{
    // do process B
}


这一次,程序总是执行进程A。
我的问题是为什么if-else条件不使用条件的操作值,而是使用设置后的左变量?

nbewdwxp

nbewdwxp1#

当你把0赋值给变量condition时,它变成了false,因为0代表false,任何非零值代表true.so,当你赋值0时,else condition被执行,当你赋值2时,condition代表一个true语句,所以,它执行.

if(condition = 0)

字符串
在将值0赋给条件之后,

if(condition)


当它为false时,它不会执行。但是,当condition = 2时,它以同样的方式工作并变为true。因此,if条件将被执行。

sr4lhrrt

sr4lhrrt2#

您使用了错误的运算符。
a = 10;
“等于”运算符表示“将值分配给”。
现在要比较两个操作数a和B,看a是否= b,你可以使用另一个操作数,这个操作数是双等号(==)。

if(variable == 0)
{
    //do process A
}
else
{
    // do process B
}

字符串
你看。
如果名为“variable”的变量的值= 8不等于0,则整个“variable == 0”表达式为FALSE。因此,将运行过程B。
否则,如果变量确实等于0,则将执行过程A,因为“variable == 0”为真。
这就像:

if(EXPRESSION)
{
    // EXPRESSION IS TRUE
}
else
{
    //EXPRESSION IS FALSE
}


“怎么样?

ep6jt1vc

ep6jt1vc3#

在C语言中,赋值是一个返回设置值的表达式;即x = 2将得到2。
这允许你做这样的事情:

unsigned char ch;
while((ch = readFromFile(f)) != EOF) {
    // do something with ch
}

字符串
如果你不小心把==错打成了=,它还允许你搬起石头砸自己的脚,这就是为什么这个“功能”在很多其他语言中都没有出现。
在第一个循环中,表达式condition = 0将始终导致0,从而导致执行else分支。类似地,condition = 2导致2,从而导致执行真正的分支。

相关问题