Re: [閒聊] 超無言的for迴圈...

看板C_and_CPP作者 (--???--)時間15年前 (2009/04/23 00:47), 編輯推噓12(12010)
留言22則, 8人參與, 最新討論串2/4 (看更多)
※ 引述《OpenSkyWin (雞飛城市)》之銘言: : 期中考居然碰到像這種for迴圈 : int i; : for(i=0;i=1;i++) : { : printf(" i is %d \n",i); : } : 然後問你這個迴圈總共會執行幾次= =" : 判斷式給我放i=1咧...我咧,這什麼東西... : 要是放0或1或a-i什麼之類的我還能懂 : 到底這樣放有什麼意思呢?? : 增加閱讀的困難?? 條件判斷放i=1的話,會變成這樣 (1)賦值 i = 1; (2)邏輯判斷: i的值如果是零,代表false;非零值則代表true 由於前一個動作讓i的值變成1,所以這個for迴圈會變成無窮迴圈 假設這個題目沒有出錯 我認為這個題目是提醒寫程式的人,要注意"="和"=="兩者的不同 不小心寫錯的話就會造成無窮迴圈,程式卡在哪邊都不知道 -- ∫work dt = success -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.176.224

04/23 00:51, , 1F
話說VB不能打"==",只能打"=".....
04/23 00:51, 1F

04/23 00:51, , 2F
+1
04/23 00:51, 2F

04/23 00:51, , 3F
不管賦值還是判斷都是使用同一個符號...
04/23 00:51, 3F

04/23 00:53, , 4F
「前一個動作讓i的值變成1」這句話不太懂??
04/23 00:53, 4F

04/23 00:53, , 5F
我知道for迴圈其實可以拆成while來看
04/23 00:53, 5F

04/23 00:56, , 6F
不是說了嗎,i的值是1時就表示其邏輯值是true
04/23 00:56, 6F

04/23 00:56, , 7F
(i) 下面是(2) 我感覺應該是要打(1) ?
04/23 00:56, 7F
嗯...打錯了

04/23 00:57, , 8F
迴圈每次的邏輯值都是true迴圈自然就不會停
04/23 00:57, 8F

04/23 00:57, , 9F
哦,判斷式去執行i=1的意思哦
04/23 00:57, 9F

04/23 00:57, , 10F
是這樣嗎
04/23 00:57, 10F

04/23 01:00, , 11F
對呀, 無論 i=1 還是 i==1 都是 expression 呀
04/23 01:00, 11F

04/23 01:00, , 12F
只是 i=1 會改變 i 的值, 回傳值也是 i
04/23 01:00, 12F

04/23 01:01, , 13F
哦,thanks!! 感謝各位!!
04/23 01:01, 13F

04/23 01:01, , 14F
i==1 不會改變 i 的值, 回傳值是 i 和 1 是否相等的結果
04/23 01:01, 14F

04/23 01:01, , 15F
養成習慣 for(i=0;1=i;i++) =>> 編譯就會報錯了
04/23 01:01, 15F

04/23 01:02, , 16F
不過 for(i=0;a=i;i++) 這就沒辦法了
04/23 01:02, 16F

04/23 01:04, , 17F
看來這判斷式的變化真多端啊...真是不能小看@@
04/23 01:04, 17F

04/23 01:07, , 18F
可是ch大.那個報錯原因是因為不能賦值給常數吧
04/23 01:07, 18F

04/23 01:09, , 19F
C裡面只要符合格式它就不會報錯了
04/23 01:09, 19F
※ 編輯: cismjmgoshr 來自: 61.230.176.224 (04/23 01:09)

04/23 01:15, , 20F
error C2106: '=' : 左運算元必須是左值 (l-value)
04/23 01:15, 20F

04/23 01:15, , 21F
的確我是用 C2106 來提醒自己不要寫錯
04/23 01:15, 21F

04/23 01:18, , 22F
for 中間沒用過 == 所以不會有這問題 倒是 != 蠻常用的
04/23 01:18, 22F
文章代碼(AID): #19xqeoFz (C_and_CPP)
文章代碼(AID): #19xqeoFz (C_and_CPP)