Re: [問題] if 和 label的問題

看板C_and_CPP作者 ((short)(-15074))時間15年前 (2009/04/24 23:24), 編輯推噓5(500)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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
大大也順便教我寫程式吧 QQ if else 是什麼???
04/25 10:28, 4F

04/28 23:04, , 5F
感謝M(_ _)M
04/28 23:04, 5F
文章代碼(AID): #19yTcXWt (C_and_CPP)
文章代碼(AID): #19yTcXWt (C_and_CPP)