2015-09-04 66 views
-3

我有folliwing代码:逻辑测试失败,意外输出

void main() 
{ 
    int a=30,b=40,x; 
    x=(a!=10) && (b=50); 
    printf("x=%d",x); 
} 

在这里,结果我得到x=1。在&&算子中,只有在两者都为真的情况下,第一个是真的,即不等于10,但第二个是b=50,这是错误的,那么x的值也是1。这是为什么发生?

+3

查看“=”和“==”之间的区别! – psmears

+4

应该是b == 50 – OldProgrammer

+2

我的天哪,他们还是做Turbo C? –

回答

4

在您的代码,更改

... && (b=50); 

... && (b == 50); 

否则,值的b,所述assignement后,将被认为是&&操作者的第二表达。

+0

甚至更​​好:'50 == b' – KIIV

+1

@KIIV尤达,呃?当然你可以做到。 :) –

4

第二个比较实际上是一个任务。它应该是:

x=(a!=10) && (b==50); 
0

表达(b=50)具有逻辑值1true),不0false)。

2

您正在使用赋值运算符=而不是等值测试==运算符对b

固定代码


#include <stdio.h> 

void main() 
{ 
    int a=30, b=40, x; 
    x = ((a!=10) && (b==50)); 
    printf("x=%d",x); 
} 

一个很好的策略,以防止这种情况在未来是要交换LVALUERVALUE,让您的代码如下所示:

x = ((10 != a) && (50 == b)); 

如果你坚持以上风格,如果你犯同样的错误在未来,你最终会得到:

50 = b 

这将引发一个编译错误,因为你不能指定变量RVALUE到恒定/文字LVALUE