我有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。这是为什么发生?
我有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。这是为什么发生?
在您的代码,更改
... && (b=50);
到
... && (b == 50);
否则,值的b
,所述assignement后,将被认为是&&
操作者的第二表达。
甚至更好:'50 == b' – KIIV
@KIIV尤达,呃?当然你可以做到。 :) –
第二个比较实际上是一个任务。它应该是:
x=(a!=10) && (b==50);
表达(b=50)
具有逻辑值1
(true
),不0
(false
)。
您正在使用赋值运算符=
而不是等值测试==
运算符对b
。
固定代码
#include <stdio.h>
void main()
{
int a=30, b=40, x;
x = ((a!=10) && (b==50));
printf("x=%d",x);
}
一个很好的策略,以防止这种情况在未来是要交换LVALUE
和RVALUE
,让您的代码如下所示:
x = ((10 != a) && (50 == b));
如果你坚持以上风格,如果你犯同样的错误在未来,你最终会得到:
50 = b
这将引发一个编译错误,因为你不能指定变量RVALUE
到恒定/文字LVALUE
。
查看“=”和“==”之间的区别! – psmears
应该是b == 50 – OldProgrammer
我的天哪,他们还是做Turbo C? –