2010-05-14 199 views
4

考慮這個「大考」的問題:爲什麼不輸出任何代碼?

int main() 
{ 
    int a=10,b=20; 
    char x=1,y=0; 
    if(a,b,x,y) 
    { 
     printf("EXAM"); 
    } 
} 

請讓我知道爲什麼不打印任何東西。

+1

咕嚕嗨,我很驚訝在這裏見到你。無論如何,對我來說,輸出不是「」沒有打印「」,我也沒有看到輸出的C問題...... – sbi 2010-05-14 10:41:43

回答

3

a,b,x,y的結果是y(因爲逗號運算符評估爲其右操作數的結果)並且y是0,這是錯誤的。

2

逗號運算符返回最後一條語句,即y。由於y爲零,因此if語句的計算結果爲false,因此從不執行printf

1

因爲表達式a,b,x,y評估爲y,其又評估爲0,所以相應的塊從不執行。逗號運算符執行每個語句並返回最後一個值。如果你想邏輯結合,使用&&操作:

if (a && b && x && y) { ... } 
11

Comma operator - 評估1的表達,並返回第二個。因此a,b,x,y將返回y中存儲的值,即0。

0

其他人已經提到逗號運算符返回最右邊的值。如果你想打印的值,如果這些變量是真正使用的邏輯或:

int main() 
{ 
    int a=10,b=20; 
    char x=1,y=0; 
    if(a || b || x || y) 
    { 
     printf("EXAM"); 
    } 
} 

但後來意識到了逗號評估所有表現的事實,而或操作員就停止爲值是真的。因此,與

int a = 1; 
int b; 
if(a || b = 1) { ... } 

B有一個未定義的值,而與

int a = 1; 
int b; 
if(a, b = 1) { ... } 

B將被設置爲1

相關問題