[問題] 前置/後置 遞增 一問

看板C_and_CPP (C/C++)作者 (cody)時間15年前 (2011/04/20 11:51), 編輯推噓5(5017)
留言22則, 5人參與, 最新討論串1/1
==================以下為正確程式碼 int i=100; if (i=0) { printf("no\n"); printf("i=%d\n",++i); } else { printf("no\n"); printf("i=%d\n",i++); } printf("i=%d\n",i); 此程式碼輸出結果為 no 0 1 ========================= 以下是我的個人分析...(錯誤的分析) if已經指定為0 所以跑if那段(並非else) 輸出no 之後因為前置i 所以 輸出為1 接著跑最後一行 輸出1 請問我邏輯哪裡錯了...是在前置/後置的部份 還是指定之後 if-else呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.68.164.61

04/20 11:52, , 1F
if (i=0) if (i == 0)
04/20 11:52, 1F

04/20 11:56, , 2F
喔,我懂你的意思了。if (i=0) 會讓i 的值變為0,且該判斷
04/20 11:56, 2F

04/20 11:56, , 3F
式的值亦為0,所以就跑到 else 裡去了
04/20 11:56, 3F
不好意思 我不是很懂為什麼會跑到else 煩請解釋 謝謝:) ※ 編輯: super0517 來自: 203.68.164.61 (04/20 11:58)

04/20 11:58, , 4F
另外,你第2的printf()的雙引號擺錯了,
04/20 11:58, 4F

04/20 11:58, , 5F
應該是 printf("i=%d\n" ,++i); 才對
04/20 11:58, 5F
已更正 謝 ※ 編輯: super0517 來自: 203.68.164.61 (04/20 11:59)

04/20 11:59, , 6F
if 語句會先執行判斷式裏面的運算,如果結果非0 就執行{}
04/20 11:59, 6F

04/20 12:00, , 7F
裡的東西,如果為0,就跑到下面的 else 裡
04/20 12:00, 7F
但是就這麼說的話....例如這題(無誤): int i=200; if (i=100) printf("i is 100"); else printf("i is 200"); 為什麼他的輸出結果會是 i is 100 不是會跳到else @@? (大亂)

04/20 12:00, , 8F
if(i=0) 裡的 i=0 是恆成立(true).
04/20 12:00, 8F

04/20 12:02, , 9F
樓上是什麼意思?不懂 @@?
04/20 12:02, 9F

04/20 12:02, , 10F
if (i=0) 這麼寫, 不會跑到 else 裡.
04/20 12:02, 10F
※ 編輯: super0517 來自: 203.68.164.61 (04/20 12:06)

04/20 12:06, , 11F
04/20 12:06, 11F

04/20 12:07, , 12F
if(i=0)是恆不成立吧
04/20 12:07, 12F

04/20 12:09, , 13F
手邊用BCB6.0測過 if(expression) 的case了.
04/20 12:09, 13F

04/20 12:09, , 14F
我手邊 C::B 10.05 測過這個 case了
04/20 12:09, 14F

04/20 12:15, , 15F
測一下 y=(x=100); y=(x=0); 不就好了
04/20 12:15, 15F

04/20 12:16, , 16F
我錯了
04/20 12:16, 16F

04/20 12:17, , 17F
更直接 printf("%s", (i=0)? "T": "F"); 不就好了 =口=
04/20 12:17, 17F
我還是不知道為什麼跑ELSE 可以更白話嗎...不好意思=___=" ※ 編輯: super0517 來自: 203.68.164.61 (04/20 12:18)

04/20 12:18, , 18F
至於if ( i=100 ) 因為 i=100 的值是 100 (非0) 故為真
04/20 12:18, 18F
意思是說 只有 if判斷式裡指定0 的才會跳到else? 假若if判斷式指定為非0 都會繼續運算if{}? 是嗎@@? ※ 編輯: super0517 來自: 203.68.164.61 (04/20 12:20)

04/20 12:21, , 19F
問的都不好意思了= = 腦袋不是很靈..
04/20 12:21, 19F

04/20 12:21, , 20F
C 裡面非0即真,記住這個原則:)
04/20 12:21, 20F

04/20 12:21, , 21F
可以看一下這篇文章:#1ClKVqGM (C_and_CPP)
04/20 12:21, 21F
好的 謝謝:) 豁然開朗的感覺 好開心!!! 來去看一下!!! ※ 編輯: super0517 來自: 203.68.164.61 (04/20 12:22)

04/20 12:23, , 22F
我才想說正要貼超哥的文章代碼的說XD
04/20 12:23, 22F
這問題我想了3天了 哈哈 結果是漏了這項知識!! 哈哈 好開心~~~謝謝大家:) ※ 編輯: super0517 來自: 203.68.164.61 (04/20 12:27)
文章代碼(AID): #1DhbWqN9 (C_and_CPP)
文章代碼(AID): #1DhbWqN9 (C_and_CPP)