Re: [問題] if 和 label的問題
※ 引述《t007123 (林英傑後援會!!!)》之銘言:
: 我可以成這樣嗎?
: 這樣他都會當...
: label1:
: if(xxxxxxxxx) /* c1 */
: {
: xxxxxx /* s1 */
: label2;
: if(xxxxxxxxx) /* c2 */
: {
: xxxxxxx /* s2 */
: goto label1;
: }
: else
: {
: xxxxxxxx /* s3 */
: if(xxxxxx) /* c3 */
: {
: xxxxxx /* s4 */
: goto label1;
: }
: else
: {
: xxxxx /* s5 */
: goto label2;
: }
: 好像是這裡出現問題
: }
: }
: 請各位先進指導小弟一下
: 謝謝~
看你推文說沒寫多少程式
就來教你一下怎麼改吧
首先要畫流程圖 (簡單的即可, 幫助你結構化程式)
像你這種情形大致可以這樣畫 (編號看上面)
http://w.csie.org/~b94102/misc/Flow01.png
可以看到 在 label1 這邊是這段程式的主要的出入口
控制的是 c1 這個條件
因此大結構就是個 while(c1) { }
再來是 label2 這邊
乍看有點亂 但實際上它可以這樣"框"起來:
http://w.csie.org/~b94102/misc/Flow02.png
在這框起來的裡面 入口是開始判斷 c2 出口則是 s2 或 s4 做完
那麼這裡就能寫成一個 while(1) { } 再靠 break; 離開
(之所以判斷條件不是 c2 或 c3 是因為你還有別的事要做
如果沒有 s2 或 s3 或等等的 那流程圖可以簡化 這裡就不一定是個無窮迴圈了
所以要你畫個流程圖也是這樣
初學還不一定能馬上掌握程式要怎麼跑時就是靠它建立概念)
因此全部綜合起來就是這樣:
while(c1)
{
s1;
while(1)
{
if(c2)
{
s2;
break;
}
s3;
if(c3)
{
s4;
break;
}
s5;
}
}
--
goto 這種東西是以儘量少用為原則
除非是那種如果硬要不用 goto 會把程式弄亂的情形才用
(不過那也要稍微大一點的程式才會出現...)
--
把流程圖這樣"框"起來也是我在另一本書上看到的技巧
它是說試著讓每一"塊" (不管大塊小塊) 都只有一進一出
這樣控制進出的條件就會浮出來 更容易轉成程式
(像這裡 這一段程式是一大塊 我框起來的是一小塊
都是各用一個 while 來描述)
--
'Oh, Harry, dont't you see?' Hermione breathed. 'If she could have done
one thing to make absolutely sure that every single person in this school
will read your interview, it was banning it!'
---'Harry Potter and the order of the phoenix', P513
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.250.80
推
04/25 00:00, , 1F
04/25 00:00, 1F
推
04/25 01:18, , 2F
04/25 01:18, 2F
推
04/25 01:54, , 3F
04/25 01:54, 3F
推
04/25 10:28, , 4F
04/25 10:28, 4F
推
04/28 23:04, , 5F
04/28 23:04, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
問題
2
10