请教大家一个简单的 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 ->不是,跳出逻辑

4906 次点击
所在节点    C
37 条回复
Alain1995
2018-12-30 16:53:37 +08:00
不判断是不是 5 直接执行。
Alain1995
2018-12-30 16:54:23 +08:00
没有 break 会一直执行。
twistedmeadows
2018-12-30 16:54:36 +08:00
不是的,你自己不主动 break 掉,它就继续向下执行到 break 的地方。
像你没有写 default 分支,编译器通常会自动加一个空的 default 分支 break 掉
shuax
2018-12-30 16:55:00 +08:00
那还要 break 干什么?
lostspirit0
2018-12-30 16:55:31 +08:00
要加 break 的 要不然就直接执行完
chinvo
2018-12-30 16:57:25 +08:00
case 只是个 tag,不是流程控制关键字,也就是需要你自己 break
yucao
2018-12-30 17:01:56 +08:00
想多了,找你的逻辑 break 有没有就没关系了...显然是错误的
aijam
2018-12-30 17:06:01 +08:00
从语义上说,switch 相当于 goto,case/default 相当于 label。
innoink
2018-12-30 17:10:08 +08:00
“他的逻辑不是这样吗……”
你从哪学的?
Vtwoguest
2018-12-30 17:11:41 +08:00
case 穿透
csysly123
2018-12-30 17:22:01 +08:00
case 是从当前语句开始执行,你的 ch2='B',就从 case 'B'开始执行,不会主动跳出
xfriday
2018-12-30 17:29:04 +08:00
go 才是你说的那样,c 里 case 到了不会主动 break
Nasei
2018-12-30 17:34:56 +08:00
现在学编程都不用看书了么...
smdbh
2018-12-30 18:00:02 +08:00
恩,这可能是 c 的一个 bug 吧。不用就没事了
Yut
2018-12-30 18:06:17 +08:00
break 啊老哥,又是一个被新语言惯坏的年轻人(笑
xiri
2018-12-30 18:11:15 +08:00
“他的逻辑不是这样吗: 判断是不是 B -> 没有 break -> 判断是不是 5 ->不是,跳出逻辑”

,,,,,
请先去了解 switch 的基础语法再来提问
zhang1215
2018-12-30 18:11:43 +08:00
不看书自己总结规律吗?
ETiV
2018-12-30 18:52:35 +08:00
如果程序员都这水平,估计到明年就会被 AI 超越了吧…
DavidNineRoc
2018-12-30 19:02:38 +08:00
恩,这可能是 c 的一个 bug 吧。不用就没事了。 希望楼主能去 github 提一个 pr,为中国开源界做贡献
GTim
2018-12-30 19:16:02 +08:00
哈哈,看这篇文章 https://www.twle.cn/l/yufei/cprogramming/cprogramming-basic-switch.html

里面有 switch 的规则


1. 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
2. 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
3. 不是每一个 case 都需要包含 break。 如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止

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

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

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

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

© 2021 V2EX