考慮這個「大考」的問題:爲什麼不輸出任何代碼?
int main()
{
int a=10,b=20;
char x=1,y=0;
if(a,b,x,y)
{
printf("EXAM");
}
}
請讓我知道爲什麼不打印任何東西。
考慮這個「大考」的問題:爲什麼不輸出任何代碼?
int main()
{
int a=10,b=20;
char x=1,y=0;
if(a,b,x,y)
{
printf("EXAM");
}
}
請讓我知道爲什麼不打印任何東西。
a,b,x,y
的結果是y
(因爲逗號運算符評估爲其右操作數的結果)並且y是0,這是錯誤的。
逗號運算符返回最後一條語句,即y
。由於y
爲零,因此if語句的計算結果爲false,因此從不執行printf
。
因爲表達式a,b,x,y
評估爲y
,其又評估爲0
,所以相應的塊從不執行。逗號運算符執行每個語句並返回最後一個值。如果你想邏輯結合,使用&&
操作:
if (a && b && x && y) { ... }
Comma operator - 評估1的表達,並返回第二個。因此a,b,x,y
將返回y中存儲的值,即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
咕嚕嗨,我很驚訝在這裏見到你。無論如何,對我來說,輸出不是「」沒有打印「」,我也沒有看到輸出的C問題...... – sbi 2010-05-14 10:41:43