[問題] C貪食蛇問題

作者: a71245969 (熊怪唉優)   2020-07-19 21:52:34
板上大家好,小弟又來發問了
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
拜託各位大大解惑了!
作者: bluesoul (忙死你老爸)   2020-07-19 22:00:00
方向是數字還是字元?switch建議加上default
作者: mmmmei (mmm煤)   2020-07-19 22:01:00
你的case 是文字的‘1234’ 不是數字的1234
作者: Lipraxde (Lipraxde)   2020-07-19 22:31:00
用 switch 要記得寫 default 啊
作者: loveme00835 (髮箍)   2020-07-19 22:42:00
用 switch 不建議加 default label
作者: Lipraxde (Lipraxde)   2020-07-19 22:47:00
真假@@,我幾乎都會加耶
作者: loveme00835 (髮箍)   2020-07-19 22:50:00
使用 default 編譯器就沒機會幫你找出未處理的 case而 non-enum 也要好好考慮是否真的適用 switchhttps://godbolt.org/z/9Ws5v3寫 C++ 最重要的概念是把檢查的工作都交給編譯器, 編得過的程式碼就不容易出錯上面程式碼應該下 -Wswitch 搭配 default 0rz比較好的設計是把輸入和程式內部表示分開, switchover char 是權責沒有分離的例子, 既然 switch 的label 數量是固定的, 就沒道理使用 char 來表示方向,一來不能用程式碼來闡述設計, 二來因為値域太大的關係, 所有介面以及運算都是潛在會出 bug 的地方
作者: Lipraxde (Lipraxde)   2020-07-19 23:16:00
加 unreachable 也不會報錯,確實不該無腦用 default

Links booklink

Contact Us: admin [ a t ] ucptt.com