簡體   English   中英

為什么這段代碼輸出什么?

[英]Why doesn't this code output anything?

考慮這個“考試”問題:

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

請讓我知道為什么這根本不打印任何東西。

逗號運算符 - 計算第一個表達式並返回第二個表達式。 所以a,b,x,y將返回存儲在y中的值,即0。

a,b,x,yy (因為逗號運算符計算其右操作數的結果),y為0,這是假的。

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

因為表達式a,b,x,y計算結果為y ,而y又計算為0 ,所以從不執行相應的塊。 逗號運算符執行每個語句並返回最后一個語句的值。 如果您想要邏輯連接,請使用&&運算符:

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

其他人已經提到過逗號運算符返回最右邊的值。 如果要在任何這些變量為真時打印值,請使用邏輯或:

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

但是請注意以下事實:逗號評估所有表達式,而or運算符只要值為true就會停止。 所以

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

b有一個未定義的值,而有

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

b將設置為1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM