作者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/cn.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