作者cismjmgoshr (--???--)
看板C_and_CPP
標題Re: [閒聊] 超無言的for迴圈...
時間Thu Apr 23 00:47:42 2009
※ 引述《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
1F:推 Peruheru:話說VB不能打"==",只能打"="..... 04/23 00:51
2F:推 TroyLee:+1 04/23 00:51
3F:→ Peruheru:不管賦值還是判斷都是使用同一個符號... 04/23 00:51
4F:推 OpenSkyWin:「前一個動作讓i的值變成1」這句話不太懂?? 04/23 00:53
5F:→ OpenSkyWin:我知道for迴圈其實可以拆成while來看 04/23 00:53
6F:→ nswrthh:不是說了嗎,i的值是1時就表示其邏輯值是true 04/23 00:56
7F:推 Peruheru:(i) 下面是(2) 我感覺應該是要打(1) ? 04/23 00:56
嗯...打錯了
8F:→ nswrthh:迴圈每次的邏輯值都是true迴圈自然就不會停 04/23 00:57
9F:推 OpenSkyWin:哦,判斷式去執行i=1的意思哦 04/23 00:57
10F:→ OpenSkyWin:是這樣嗎 04/23 00:57
11F:推 ledia:對呀, 無論 i=1 還是 i==1 都是 expression 呀 04/23 01:00
12F:→ ledia:只是 i=1 會改變 i 的值, 回傳值也是 i 04/23 01:00
13F:推 OpenSkyWin:哦,thanks!! 感謝各位!! 04/23 01:01
14F:→ ledia:i==1 不會改變 i 的值, 回傳值是 i 和 1 是否相等的結果 04/23 01:01
15F:推 chrisdar:養成習慣 for(i=0;1=i;i++) =>> 編譯就會報錯了 04/23 01:01
16F:→ chrisdar:不過 for(i=0;a=i;i++) 這就沒辦法了 04/23 01:02
17F:推 OpenSkyWin:看來這判斷式的變化真多端啊...真是不能小看@@ 04/23 01:04
18F:推 sandr1983:可是ch大.那個報錯原因是因為不能賦值給常數吧 04/23 01:07
19F:→ sandr1983:C裡面只要符合格式它就不會報錯了 04/23 01:09
※ 編輯: cismjmgoshr 來自: 61.230.176.224 (04/23 01:09)
20F:推 chrisdar:error C2106: '=' : 左運算元必須是左值 (l-value) 04/23 01:15
21F:→ chrisdar:的確我是用 C2106 來提醒自己不要寫錯 04/23 01:15
22F:推 wowtiger:for 中間沒用過 == 所以不會有這問題 倒是 != 蠻常用的 04/23 01:18