作者yauhh (喲)
看板C_and_CPP
標題Re: [閒聊] 超無言的for迴圈...
時間Thu Apr 23 02:35:36 2009
※ 引述《OpenSkyWin (雞飛城市)》之銘言:
: 期中考居然碰到像這種for迴圈
: int i;
: for(i=0;i=1;i++)
: {
: printf(" i is %d \n",i);
: }
: 然後問你這個迴圈總共會執行幾次= ="
: 判斷式給我放i=1咧...我咧,這什麼東西...
: 要是放0或1或a-i什麼之類的我還能懂
: 到底這樣放有什麼意思呢??
: 增加閱讀的困難??
我想這是寫程式的人自己的盲點,可能因為寫久了都看到比較普通的for迴圈寫法,
以及認為for必須寫成有效完成一段程式的樣式.
但是,for語法的三個位置,第一個規定進入迴圈的初值,第二個規定持續迴圈的條件,
第三個規定迴圈前後的差異. 所以 for(i=0;i=1;i++) 不正是規定了:
- 進入迴圈時,i為0.
- 若「i能指定為1」則持續迴圈.
結果會發現,無論什麼情況,i都能指定為1,所以是無窮迴圈嘛!
沒有人規定程式都要寫對,也沒有人規定考卷上出現的程式都要「正確」或「有意義」.
當有些人在抱怨考題「沒有意義」的時候,卻忘了他應考只有「在考題正確
的情況下不要答錯」的權力,而沒有修正考題的權力.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.225.34
※ 編輯: yauhh 來自: 59.112.225.34 (04/23 02:39)
1F:推 kvykn:解釋完美 04/23 08:18
2F:推 OpenSkyWin:感恩!! 04/23 09:55
3F:→ VictorTom:推這位大大的說法, 除非題目是錯的, 否則不應該改題目:) 04/23 09:55
4F:推 stonehomelaa:很明顯這是陷阱題吧 04/23 09:57
5F:推 OpenSkyWin:其實在解的過程我還把i=1搬過來變成i-1=0想說i值是1那 04/23 10:00
6F:→ OpenSkyWin:結果就是false ...XD 04/23 10:01
7F:→ VictorTom:基本上那跟 if(i=1) 是一樣的意思, 可以說是陷阱題, 04/23 10:01
8F:→ VictorTom:但是滿有教育意義的; 也是檢視對statement expression 04/23 10:02
9F:→ VictorTom:了解程度的好方法XDDD 04/23 10:02
10F:→ ksmrt0123:若「i能指定為1」... 這說法是錯的 04/23 13:28
11F:推 fjm31714:恩恩 應該是(i=1)的值為1吧 04/23 13:53
12F:推 stonehomelaa:科科 原po寫個if (i = 0)就知道囉 ^.< 04/23 14:20
13F:→ yauhh:喔,講錯了,應該說「i指定為1的意義被認為真」,雖然難懂一點 04/23 16:57
14F:推 ledia:不是吧, 就是 i 的值吧, 不然 for(;i=0;) 呢? @@ 04/23 18:53
15F:→ ledia:跟指定什麼的意義為不為真沒有關係 04/23 18:53
16F:→ ledia:不然 j=i=0; j=i=1; 不就沒差了 04/23 18:54
17F:推 stonehomelaa:對呀 跟指定不指定沒啥關 就是看i的值 04/23 19:24
18F:→ sunneo:我想`指定` 應該是英文 assign 的翻譯吧 ~_~ 04/23 23:34
19F:→ sunneo: 或者說應該叫做指派 04/23 23:34
20F:→ yauhh:當一個條件式用到一個指定,就可以說指定啊,程式碼明寫了指定 04/24 00:40
21F:→ yauhh:卻「跟指定無關」,啥意思? 指定本來就是assignment 04/24 00:40
22F:→ yauhh:指定,指派,都一樣,只是一個譯詞;不要把譯詞再拿去用中文思考 04/24 00:41
23F:→ yauhh:for(;i=0;)內是i指定為0的意義不成立,因為全值0認定為false 04/24 00:43
24F:→ yauhh:今天我說「意義被認為真」只是指解釋成true而已,何必想太多 04/24 00:43
25F:→ yauhh:分析那麼多是要吵到什麼時候,大家都是口語邏輯達人嗎? 04/24 00:44
26F:→ yauhh:大家有好好正式修過「口語邏輯」這堂課嗎?真要那麼嚴肅!? 04/24 00:45
27F:→ yauhh:再爭下去,是不是要順便幫以上的語意寫編譯器了? 04/24 00:48
28F:→ sunneo:息怒吧 我想事情並沒這麼嚴重 04/24 01:01
29F:推 ledia:我是說跟指派的意義無關, 卻變成了「跟指定無關」 04/24 01:37
30F:推 ledia:指定指派都好, 本身沒有什麼意義, 只有傳回值, 如果你真的要 04/24 01:41
31F:→ ledia:扯邏輯的話。 04/24 01:41
32F:推 wupojung:如果是這樣呢 const y=0; 04/24 07:49
33F:→ wupojung:for(int i=0;j=1;i++) 如果是這樣會如何阿? 04/24 07:50
34F:推 wupojung:打太快...應該是 const int y=0; 感謝原PO的解釋 04/24 07:53
35F:→ wupojung:還是打錯.....const int j=0; (我還沒睡醒 XD...) 04/24 07:54
36F:推 VictorTom:樓上, j是const的話, j=1 compiler就會把你擋掉了.... 04/24 09:45
37F:推 wupojung:恩...我的意思就在這裡啊..還感謝原PO讓我明白 04/25 01:48
38F:→ wupojung:其實 i=1 這樣會return true.....(應該可以這樣說吧) 04/25 01:48