请教大家一个简单的 C 语言问题.

2018-12-30 16:51:31 +08:00
 Cheez
#include<stdio.h>
main() {
	char ch1, ch2 = 'B';
	switch (ch2) {
	case 'B':
		printf("B");
	case '5':
		printf("B");
	}
	system("pause");
}

我试了一下,这样会输出 BB,可明明 ch2=B 啊。。。。为什么会同时符合两个 case

他的逻辑不是这样吗: 判断是不是 B -> 没有 break -> 判断是不是 5 ->不是,跳出逻辑

4933 次点击
所在节点    C
37 条回复
inframe
2018-12-30 19:46:59 +08:00
break 都没有了。。。
kljsandjb
2018-12-30 19:54:54 +08:00
第一个发生 fall through,建议把基础的东西补补…
chenqh
2018-12-30 20:02:01 +08:00
估计是忘了 switch 要 break 了把
jiejiss
2018-12-30 20:23:12 +08:00
按照你的说法,要 break 有什么用。。。反正后面的 case 不符合就会自动跳出,写 break;还得敲六下键盘
qiuyi116
2018-12-30 21:33:52 +08:00
ls 说了。没有 break 会继续执行。switch 的实现是跳转表,case 就是一个 tag,找到对应的 tag 位置后开始执行,如果不 break 会继续往后面执行。break 会跳转出 switch 的代码块。
creanme
2018-12-30 22:22:28 +08:00
请教一下 V2EX 是怎么贴代码的。
dai201617
2018-12-30 23:11:48 +08:00
哈哈哈课设验收的时候我也曾经遇到过这个问题
ericgui
2018-12-31 02:09:21 +08:00
case 满足后要 break
ThomasZ
2018-12-31 02:46:47 +08:00
break 呢,没有 break 会向下继续,直到 default
msg7086
2018-12-31 06:55:34 +08:00
Case 是跳转。神™判断。哪来的判断啊。
enchilada2020
2018-12-31 08:45:40 +08:00
这可真是 人家都说了是一个简单的问题 你们就简单的看看 能答就好好答一下 不能答就一笑而过好了 群嘲算什么 那么多需要解答的问题下都空着呢 有能力不去答一下么?
roshad
2018-12-31 08:48:20 +08:00
你假如是在学 C,马上换掉你现在用的书,以免误入歧途。
roshad
2018-12-31 08:50:20 +08:00
我推荐你 c programming:a modern approach
aijam
2018-12-31 09:50:08 +08:00
@enchilada2020 同感,lz 恰恰在学习过程中找到了 c 语言设计蹩脚的地方,提出这样的问题正说明 lz 有自己消化过。为什么说 switch fallthrough 是 c 的设计失误?最直接的例证是,参与过当年 c 语言开发的 Ken Thompson 在后来设计 golang 的时候尽管保留了 switch 语法但丢弃了 fallthrough,也不用程序员每次手工 break。其他从流行的脚本语言比如 perl/ruby/python 到新一代的编译语言比如 swift/kotlin/rust 无一不如此,要不就是直接没有 switch,即使有 switch 或者接近 switch 的语法也不会有 fallthrough。
loading
2018-12-31 09:53:57 +08:00
楼主,你可以这样玩一下:

#include<stdio.h>
main() {
char ch1, ch2 = 'B';
switch (ch2) {
case '5':
printf("5");
case 'B':
printf("B");
}
system("pause");
}
sunzhenyucn
2018-12-31 18:54:26 +08:00
推荐这本书《 Learn C the hard way 》
nichijou
2019-01-01 08:32:00 +08:00
新学有疑问很正常,但是这个问题不需要发帖,随便搜一下就会有答案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/522560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX