在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
条件不使用条件的操作值,而是使用设置后的左变量?
3条答案
按热度按时间nbewdwxp1#
当你把0赋值给变量condition时,它变成了false,因为0代表false,任何非零值代表true.so,当你赋值0时,else condition被执行,当你赋值2时,condition代表一个true语句,所以,它执行.
字符串
在将值0赋给条件之后,
型
当它为false时,它不会执行。但是,当condition = 2时,它以同样的方式工作并变为true。因此,if条件将被执行。
sr4lhrrt2#
您使用了错误的运算符。
a = 10;
“等于”运算符表示“将值分配给”。
现在要比较两个操作数a和B,看a是否= b,你可以使用另一个操作数,这个操作数是双等号(==)。
字符串
你看。
如果名为“variable”的变量的值= 8不等于0,则整个“variable == 0”表达式为FALSE。因此,将运行过程B。
否则,如果变量确实等于0,则将执行过程A,因为“variable == 0”为真。
这就像:
型
“怎么样?
ep6jt1vc3#
在C语言中,赋值是一个返回设置值的表达式;即
x = 2
将得到2。这允许你做这样的事情:
字符串
如果你不小心把
==
错打成了=
,它还允许你搬起石头砸自己的脚,这就是为什么这个“功能”在很多其他语言中都没有出现。在第一个循环中,表达式
condition = 0
将始终导致0
,从而导致执行else
分支。类似地,condition = 2
导致2
,从而导致执行真正的分支。