[問題] 啥?這種變形條件式~誰來救我???

看板C_and_CPP作者 (☆癡心處男乖寶寶☆)時間14年前 (2011/10/30 11:51), 編輯推噓0(0035)
留言35則, 7人參與, 最新討論串1/1
請問下列程式題: int i=3,j=5; (1) if(i=2||j=4){ printf(%d,i); printf(%d,j); <--output: i=2, j=5 } (2) if(i==2||j==4){ printf(%d,i); printf(%d,j); <--output: 條件不成立,不印出訊息 } (3)if(i==2||j=4){ printf(%d,i); printf(%d,j); <--output: i=3, j=4 } (4)if(i=2 && j=4){ printf(%d,i); printf(%d,j); <--output: i=2, j=4 } (5)if(i==2 && j==4){ printf(%d,i); printf(%d,j); <--output: 條件不成立,不印出訊息 } ================================================================ #各位強者大大~上述5小題,我只能了解(2)和(5)~ 但是(1)(3)(4)這幾題~用指定運算子或指定與關係運算子混用的條件式, 我就搞不懂他的邏輯是啥~為何會output出那種結果.... 麻煩大大賜教解惑...謝謝喔咪! [PS.好怪!條件式不是應該由關係運算子構成嗎??怎麼有指定運算子這種的咧??] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.32.136

10/30 11:52, , 1F
試試看 if (i = 0) { printf("OK"); } 再把 0 改成其他
10/30 11:52, 1F

10/30 11:52, , 2F
數字,執行看看
10/30 11:52, 2F

10/30 11:53, , 3F
我在這篇文章 #1ClKVqGM (14151) 也有說明這件事
10/30 11:53, 3F

10/30 12:09, , 4F
為什麼要這樣搞自己...
10/30 12:09, 4F

10/30 12:11, , 5F
我還是搞不懂....@=.=@
10/30 12:11, 5F

10/30 12:12, , 6F
你有看過我貼的那篇文章嗎?請說說你哪裡還有疑問
10/30 12:12, 6F

10/30 12:14, , 7F
在if內有=總共會作兩件事情,1.先做assign
10/30 12:14, 7F

10/30 12:14, , 8F
2.在用assign的那個數值去做bool判斷
10/30 12:14, 8F

10/30 12:14, , 9F
那篇中~既然if(0)時,會false,不會執行n=1,那程式不就
10/30 12:14, 9F

10/30 12:15, , 10F
應該停止了嗎??為何會繼續下去try else if的??
10/30 12:15, 10F

10/30 12:15, , 11F
if...else會一直往下執行,直到結束或是遇到成立
10/30 12:15, 11F

10/30 12:17, , 12F
對喔!可是一開始宣告int n=0~一直執行下去不是都不會
10/30 12:17, 12F

10/30 12:18, , 13F
有成立的時候嗎??=.=
10/30 12:18, 13F

10/30 12:19, , 14F
第二個else if有做assign的動作,把n變成1,然後用
10/30 12:19, 14F

10/30 12:19, , 15F
1去做判斷,if(1)這樣就成立了
10/30 12:19, 15F

10/30 12:28, , 16F
喔~那篇我看懂了!但我這篇的(1)我還是想不懂~
10/30 12:28, 16F

10/30 12:29, , 17F
題(1)的output的j值怎麼不是4??
10/30 12:29, 17F

10/30 12:32, , 18F
short circuit. "A || B" 若 A 是 true 就不會執行 B
10/30 12:32, 18F

10/30 12:38, , 19F
short circuit??.....我又被搞混了...不懂了~
10/30 12:38, 19F

10/30 12:40, , 20F
先執行 i=2, 回傳2 (true), 就不會再執行 j=4
10/30 12:40, 20F

10/30 13:08, , 21F
喔?所以題(3)若改成if(i==3||j=4),輸出會是i=3,j=5 ??
10/30 13:08, 21F

10/30 13:11, , 22F
試試看就知道囉
10/30 13:11, 22F

10/30 14:13, , 23F
題(3)是==啊, 「=』和「==』是不一樣的運算子
10/30 14:13, 23F

10/30 16:49, , 24F
james大生氣兒了!我再此補充最後不解之處:
10/30 16:49, 24F

10/30 16:51, , 25F
關於"n非0則true.||前面成立就直接進入if"這個怪現象~
10/30 16:51, 25F

10/30 16:52, , 26F
它是純粹適用條件式為指定運算子構成者~
10/30 16:52, 26F

10/30 16:52, , 27F
還是即使條件式是關係運算子構成者亦適用呢??#=.=#
10/30 16:52, 27F

10/30 16:53, , 28F
建議請把關鍵詞「short circuit」拿去google就會知道了
10/30 16:53, 28F

10/30 16:55, , 29F
去看書去看書(/0-0)/
10/30 16:55, 29F

10/31 11:25, , 30F
非零即真
10/31 11:25, 30F

11/01 15:02, , 31F
1的問題是這樣.用||的條件式時.當第一個為true時.就可以
11/01 15:02, 31F

11/01 15:04, , 32F
結束這個敘述了.因此後面的assign就沒做了.記得養成
11/01 15:04, 32F

11/01 15:05, , 33F
括號
11/01 15:05, 33F

11/01 15:12, , 34F
if(i=2||j=4)->if( (i=2) || (j=4) ).我猜超哥只想揍你
11/01 15:12, 34F

11/01 15:12, , 35F
沒生氣
11/01 15:12, 35F
文章代碼(AID): #1EhCccOF (C_and_CPP)