作者a71245969 (熊怪唉優)
看板C_and_CPP
標題[問題] C貪食蛇問題
時間Sun Jul 19 21:52:34 2020
板上大家好,小弟又來發問了
1.程式碼:
https://0rz.tw/ORCNi
2.問題:程式中設定蛇轉向時(程式碼片段如下圖)使用switch來做多重選擇會使程式crash
但用if-else或if-if撰寫都正常,想請問原因為何?
https://imgur.com/gxWfqTD
3.使用if-if或if-else之寫法:
(1)if-if:
https://imgur.com/s9gDHJs
(2)if-else:
https://imgur.com/dUe7ybw
拜託各位大大解惑了!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.235.148.102 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1595166757.A.4CA.html
※ 編輯: a71245969 (49.216.228.58 臺灣), 07/19/2020 21:53:44
1F:→ bluesoul: 方向是數字還是字元?switch建議加上default 07/19 22:00
2F:→ mmmmei: 你的case 是文字的‘1234’ 不是數字的123407/19 22:01
感謝上面兩位大大,抱歉問了個蠢問題QQ
P幣不多還請包涵
※ 編輯: a71245969 (49.216.228.58 臺灣), 07/19/2020 22:11:03
※ 編輯: a71245969 (49.216.228.58 臺灣), 07/19/2020 22:29:36
3F:→ Lipraxde: 用 switch 要記得寫 default 啊 07/19 22:31
4F:→ loveme00835: 用 switch 不建議加 default label 07/19 22:42
5F:→ Lipraxde: 真假@@,我幾乎都會加耶 07/19 22:47
6F:→ loveme00835: 使用 default 編譯器就沒機會幫你找出未處理的 case 07/19 22:50
7F:→ loveme00835: 而 non-enum 也要好好考慮是否真的適用 switch 07/19 22:51
9F:→ loveme00835: 寫 C++ 最重要的概念是把檢查的工作都交給編譯器, 編 07/19 22:52
10F:→ loveme00835: 得過的程式碼就不容易出錯 07/19 22:53
11F:→ loveme00835: 上面程式碼應該下 -Wswitch 搭配 default 0rz 07/19 22:57
12F:→ loveme00835: 比較好的設計是把輸入和程式內部表示分開, switch 07/19 22:59
13F:→ loveme00835: over char 是權責沒有分離的例子, 既然 switch 的 07/19 23:01
14F:→ loveme00835: label 數量是固定的, 就沒道理使用 char 來表示方向, 07/19 23:02
15F:→ loveme00835: 一來不能用程式碼來闡述設計, 二來因為値域太大的關 07/19 23:03
16F:→ loveme00835: 係, 所有介面以及運算都是潛在會出 bug 的地方 07/19 23:05
17F:→ Lipraxde: 加 unreachable 也不會報錯,確實不該無腦用 default 07/19 23:16