C语言 关于switch case 语句执行顺序以及结果的问题

懒笑翻 2020-01-08 02:28:40



C语言入门小白,想请教各位大佬这个程序执行的结果为什么是这样? 我以为会输出 3 2 4



...全文
1370 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒笑翻 2020-01-09
  • 打赏
  • 举报
回复
引用 8 楼 柒贰伍玖 的回复:
[quote=引用 4 楼 懒笑翻 的回复:]
[quote=引用 1 楼 柒贰伍玖 的回复:]

case 后面要加 break 跳出 case,要不然它会从进入的 case 开始 往后执行,直到碰到break,才结束switch 语句
你的程序 在printf 完之后,加上 break,像你的case 4 一样,每一case都一样,这样就会只执行某一个case
就是测试不加break执行看会不会往回执行,但是我纠结的是2+=2之后,k=4,此时为什么不执行case 4[/quote]

进switch 的时候才做判断,后面不再判断了,进到case之后就顺序往后执行,碰到break或者到switch末尾处就结束。这个是switch语句,不会循环执行。[/quote]原来只判断一次case ,我懂了,谢谢!!!
懒笑翻 2020-01-09
  • 打赏
  • 举报
回复
引用 9 楼 qq_1457346882 的回复:
switch只会往后执行,不会跳回去的,除非结束switch外面有循环再进来,加了break会执行完跳出,如果没加break,会u先判断执行对应的case值的语句,然后就不会判断case值,而是直接往下依次执行,直到遇见break跳出或者执行完结束
嗯嗯,谢谢大佬的指导,完全理解了
懒笑翻 2020-01-09
  • 打赏
  • 举报
回复
引用 10 楼 自信男孩 的回复:
引用 5 楼 懒笑翻 的回复:
[quote=引用 3 楼 自信男孩 的回复:]
k是3,所以switch跳到case 3执行,因为case 3没有break,因此顺序执行case 4,直到break或执行完。
但是为啥程序执行时,没有输出case 4 呢?

执行了呢,因为case 3后面没有break,所以执行case 4了。不然怎么会有两个输出呢[/quote]明白了,谢谢大佬!!!就是说会直接往下执行,不会判断case的值了,直到break退出
自信男孩 2020-01-09
  • 打赏
  • 举报
回复
引用 5 楼 懒笑翻 的回复:
引用 3 楼 自信男孩 的回复:
k是3,所以switch跳到case 3执行,因为case 3没有break,因此顺序执行case 4,直到break或执行完。
但是为啥程序执行时,没有输出case 4 呢?

执行了呢,因为case 3后面没有break,所以执行case 4了。不然怎么会有两个输出呢
qq_1457346882 2020-01-09
  • 打赏
  • 举报
回复 1
switch只会往后执行,不会跳回去的,除非结束switch外面有循环再进来,加了break会执行完跳出,如果没加break,会u先判断执行对应的case值的语句,然后就不会判断case值,而是直接往下依次执行,直到遇见break跳出或者执行完结束
柒贰伍玖 2020-01-09
  • 打赏
  • 举报
回复
引用 4 楼 懒笑翻 的回复:
[quote=引用 1 楼 柒贰伍玖 的回复:] case 后面要加 break 跳出 case,要不然它会从进入的 case 开始 往后执行,直到碰到break,才结束switch 语句 你的程序 在printf 完之后,加上 break,像你的case 4 一样,每一case都一样,这样就会只执行某一个case
就是测试不加break执行看会不会往回执行,但是我纠结的是2+=2之后,k=4,此时为什么不执行case 4[/quote] 进switch 的时候才做判断,后面不再判断了,进到case之后就顺序往后执行,碰到break或者到switch末尾处就结束。这个是switch语句,不会循环执行。
「已注销」 2020-01-08
  • 打赏
  • 举报
回复
输出的不就是case 3和4吗
「已注销」 2020-01-08
  • 打赏
  • 举报
回复
引用 5 楼 懒笑翻 的回复:
引用 3 楼 自信男孩 的回复:
k是3,所以switch跳到case 3执行,因为case 3没有break,因此顺序执行case 4,直到break或执行完。
但是为啥程序执行时,没有输出case 4 呢?
判断只在一开始做了一次,后面就等着退出了,就像你写个if语句,你在语句块里把条件改没了他还能立即退出不成
懒笑翻 2020-01-08
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩 的回复:
k是3,所以switch跳到case 3执行,因为case 3没有break,因此顺序执行case 4,直到break或执行完。
但是为啥程序执行时,没有输出case 4 呢?
懒笑翻 2020-01-08
  • 打赏
  • 举报
回复
引用 1 楼 柒贰伍玖 的回复:
case 后面要加 break 跳出 case,要不然它会从进入的 case 开始 往后执行,直到碰到break,才结束switch 语句
你的程序 在printf 完之后,加上 break,像你的case 4 一样,每一case都一样,这样就会只执行某一个case
就是测试不加break执行看会不会往回执行,但是我纠结的是2+=2之后,k=4,此时为什么不执行case 4
自信男孩 2020-01-08
  • 打赏
  • 举报
回复
k是3,所以switch跳到case 3执行,因为case 3没有break,因此顺序执行case 4,直到break或执行完。
oria2006 2020-01-08
  • 打赏
  • 举报
回复
只执行了两个printf,怎么会有三个值呢,应该是 3 2吧
柒贰伍玖 2020-01-08
  • 打赏
  • 举报
回复
case 后面要加 break 跳出 case,要不然它会从进入的 case 开始 往后执行,直到碰到break,才结束switch 语句 你的程序 在printf 完之后,加上 break,像你的case 4 一样,每一case都一样,这样就会只执行某一个case

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧