2015-09-04 104 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