我有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? –