看板 C_and_CPP 關於我們 聯絡資訊
板上大家好,小弟又來發問了 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://www.ptt.cc/bbs/C_and_CPP/M.1595166757.A.4CA.html ※ 編輯: a71245969 (49.216.228.58 臺灣), 07/19/2020 21:53:44
bluesoul: 方向是數字還是字元?switch建議加上default 07/19 22:00
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
Lipraxde: 用 switch 要記得寫 default 啊 07/19 22:31
loveme00835: 用 switch 不建議加 default label 07/19 22:42
Lipraxde: 真假@@,我幾乎都會加耶 07/19 22:47
loveme00835: 使用 default 編譯器就沒機會幫你找出未處理的 case 07/19 22:50
loveme00835: 而 non-enum 也要好好考慮是否真的適用 switch 07/19 22:51
loveme00835: https://godbolt.org/z/9Ws5v3 07/19 22:51
loveme00835: 寫 C++ 最重要的概念是把檢查的工作都交給編譯器, 編 07/19 22:52
loveme00835: 得過的程式碼就不容易出錯 07/19 22:53
loveme00835: 上面程式碼應該下 -Wswitch 搭配 default 0rz 07/19 22:57
loveme00835: 比較好的設計是把輸入和程式內部表示分開, switch 07/19 22:59
loveme00835: over char 是權責沒有分離的例子, 既然 switch 的 07/19 23:01
loveme00835: label 數量是固定的, 就沒道理使用 char 來表示方向, 07/19 23:02
loveme00835: 一來不能用程式碼來闡述設計, 二來因為値域太大的關 07/19 23:03
loveme00835: 係, 所有介面以及運算都是潛在會出 bug 的地方 07/19 23:05
Lipraxde: 加 unreachable 也不會報錯,確實不該無腦用 default 07/19 23:16