Re: [問題] 關於?:條件執行的問題

看板C_and_CPP作者 (自在)時間11年前 (2012/11/06 04:48), 編輯推噓3(301)
留言4則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《qazqaz ()》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : c : 最近程式書剛好讀到 ?: 判斷式的用法 : 自己試試看後發現結果不符,想不出為捨麼>< : 自己的程式碼: : #include <stdio.h> : #include <stdlib.h> : int main(void) : { : int i=4; : (i>3) : ? : printf("i>3"), : printf("a") : : : printf("i<=3"), : printf("b") : ; : system("pause"); : return (0); : } : 顯示出: : i>3ab : 多跑出一個b : run了一下範例光碟的程式碼沒有這個問題 : 感謝解惑>_< PkmX:因為?:的優先權比,高啊... 11/06 02:15 flydragon198:在兩個printf頭尾加上()就正常了,範圍的問題吧 11/06 02:25 flydragon198:( printf("i<=3"), printf("b") ) 11/06 02:26 推P大跟f大說的! [解釋] Ternary conditional (?:) (或稱conditional operator) 意即(?:)是一個operator, 他的運算元是3個expression(以下簡稱:expr) 形式為: expr1 ? expr2 : expr3 當expr1為true,就evaluate expr2, 整個expr回傳的是expr2的return值。 當expr1為false,就evaluate expr3, 整個expr回傳的是expr3的return值。 所以這行: (i > 3) ? printf("i>3"), printf("a") : printf("i<=3"), printf("b"); 你的解讀應該是: (i > 3) ? printf("i>3"), printf("a") : printf("i<=3"), printf("b"); ======= ========================== =========================== expr1 expr2 expr3 但實際上卻會被這樣解讀(注意括號): ((i > 3) ? (printf("i>3"), printf("a")) : printf("i<=3")) , printf("b"); ======= ============================ ============== | =========== expr1 expr2 expr3 | expr4 (comma operator) 所以不管怎麼樣都會印出"b"的原因在此。 [解決方案] 1.適當地加上括號 (i > 3) ? (printf("i>3"), printf("a")) : (printf("i<=3"), printf("b")); 2.換個方式寫應該也可以達成一樣的效果: printf("\n%s\n", (i > 3) ? "i>3a" : "i<=3b" ); 以上是我的理解,希望有幫上忙。 若有錯還請版上各位大大指正:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.201.221 ※ 編輯: CHeagleeye 來自: 114.33.201.221 (11/06 04:50)

11/06 06:32, , 1F
上色精美,令人一目了然!
11/06 06:32, 1F

11/06 09:53, , 2F
推....雖然上一篇這樣寫超奇怪....0.0
11/06 09:53, 2F

11/06 10:00, , 3F
推 精美上色
11/06 10:00, 3F

11/06 11:22, , 4F
3. 用 if-else
11/06 11:22, 4F
文章代碼(AID): #1Gc2OT_J (C_and_CPP)
文章代碼(AID): #1Gc2OT_J (C_and_CPP)