在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
条件不使用条件的操作值但是在设置后使用左变量?
答案 0 :(得分:4)
当你为变量条件赋值0时,它变为false,因为0表示false,任何非零值表示true.so,当你赋值0 else条件被执行时,当你赋值2条件代表一个真正的语句时,它执行......
if(condition = 0)
将值0指定为条件后变为
if(condition)
并且因为它是假的,所以它不会执行。但是,当condition = 2时,它以相同的方式工作并变为true。那么,if条件就会被执行。
答案 1 :(得分:4)
你使用了错误的操作符。
a = 10;
"等于"运算符意味着"赋值给#34;。
现在比较两个操作数a和b,看是否a = b,你使用另一个操作数。 该操作数是双等于(==)。
if(variable == 0)
{
//do process A
}
else
{
// do process B
}
现在看。
如果变量名称为"变量"值= 8不等于0, 因此整个"变量== 0"表达式,如果为FALSE。 因此,进程B将会运行。
如果否则变量确实等于0,则执行过程A因为"变量== 0"是的。
就像:
if(EXPRESSION)
{
// EXPRESSION IS TRUE
}
else
{
//EXPRESSION IS FALSE
}
知道了吗? :)
答案 2 :(得分:2)
在C中,赋值是一个返回设定值的表达式;即x = 2
将导致2。
这允许你做这样的事情:
unsigned char ch;
while((ch = readFromFile(f)) != EOF) {
// do something with ch
}
如果你不小心将==
误认为=
,它还允许你用脚射击自己,这就是为什么这个'功能'没有出现在很多其他语言中的原因。
在第一个循环中,表达式condition = 0
将始终生成0
,从而导致else
分支被占用。同样,condition = 2
会产生2
,这会导致真正的分支被采用。