C中的if-else条件

时间:2014-10-16 03:02:12

标签: c if-statement

在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 个答案:

答案 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,这会导致真正的分支被采用。