逻辑测试在具有意外输出的程序中失败

时间:2015-09-04 14:25:12

标签: c turbo-c

我有以下代码:

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

结果我得到x=1。在&&运算符中,条件为true,只有当两者都为真时,第一个为真,即不等于10,但第二个是b=50,这是错误的,那么x的值也是1在外面。为什么会这样?

4 个答案:

答案 0 :(得分:4)

在您的代码中,更改

 ... && (b=50);

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

否则,分配之后的b将被视为&&运算符的第二个表达式。

答案 1 :(得分:4)

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

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