2015-03-30 66 views
-8

爲什麼第一個條件a = 4被認爲是真的,b = 0在下面的條件中被視爲假?爲什麼a = 4評估爲真,但b = 0在if條件下評估爲假?

#include <stdio.h> 
int main() 
{ 
    int a,b; 
    if(a=4) 
    printf("a=4 --> true"); 
    else 
    printf("a=4 --> false"); 

    if(b=0) 
    printf("\nb=0 --> true"); 
    else 
    printf("\nb=0 --> false"); 

    printf("\n"); 
} 

輸出:

a=4 --> true 
b=0 --> false 
+1

你真的想要一個相等的比較:'if(a == 4)'?你知道你所擁有的僅僅是一項任務嗎? – 2015-03-30 18:39:29

+0

您可能想[查看此](http://www.tutorialspoint。com/cprogramming/c_operators.htm),然後再繼續。 – lurker 2015-03-30 18:44:01

回答

3

賦值表達式

x = n 

計算爲分配給x的值。因此a = 4評估爲4,而b = 0評估爲0。在C和C++中,非零值爲true,零值爲false。

+1

好的,這個答案有什麼問題?兩票反對錶示可能存在問題,但我看不到它。 – juanchopanza 2015-03-30 20:50:02

+0

它存在。那就是問題所在! – 2015-03-30 21:14:54

+2

@LightnessRacesinOrbit哦,那很好。我不認爲這是一個問題。我想不是每個人都知道賦值表達式的評估結果。 – juanchopanza 2015-03-30 21:21:25

5

在C和C++語言,任何非零值將被視爲true。在if條件要指定40ab造成表情a = 4b = 0的價值是40分別。

0

要比較值,請使用===是一個賦值運算符,它返回您分配的值。然後將不等於0的每個整數值視爲布爾值true

1

因爲如果b等於0,那麼測試的結果是否定的。如果你想檢查你應該寫:

b=0; // assign the value 

if(b==0) { // check if b is 0 
} 

你在做什麼是分配0給b然後條件爲真是b是不正確的。換句話說你的正在做的是類似於:

b=0; 
if(b) { 
} 
這當然如果條件不會進入,因爲b是0,這是一樣的假

0

按照C標準(6.8.4.1 if語句)

2在這兩種形式中,如果表達式 比較不等於0。在其他形式執行所述第一子語句,第二子語句是 如果表達式在此代碼段進行比較等於0

因此執行

if(a=4) 
    printf("a=4 --> true"); 
    else 
    printf("a=4 --> false"); 

表達式a = 4不等於0.因此if的第一個子狀態被執行。

在此代碼段

if(b=0) 
    printf("\nb=0 --> true"); 
    else 
    printf("\nb=0 --> false"); 

b = 0表達等於0所以如果(即對應於其他)被執行的第二子語句。

相關問題