为了账号安全,请及时绑定邮箱和手机立即绑定

这种switch语句块中default放前面的情况怎么走

这种switch语句块中default放前面的情况怎么走

繁星coding 2019-05-25 17:12:51
intc,i;for(inti=1;i
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

首先明确一下switch中的一些注意点:
1.
switch语句体由一系列case标签和一个可选default标签组成。case语句中的两个常量表达式的计算结果不能为同一个值。default标签只能出现一次。标记语句不是语法要求,但如果它们不存在,switch语句是无意义的。默认语句(即default标签)无需显示在末尾;它可以显示在switch语句体的任何位置。case或default标签只能显示在switch语句内。摘自:MicrosoftVisualStudio2015c++Switch语句官方文档
2.
上述所说的case和default本身就是标签,就是告诉编译器从满足这个标签开始向后执行,之后不会再判断其他标签的正确性,直到break语句或者switch语句的作用域结束。
Forthisproblem
STEP1:当i=1时,由于i!=2&&i!=4故从default标签后开始执行,此时执行语句c+=i;(我们现在就假设编译器帮你把c初始化为0,要知道并不是所有的编译器都这么友好)执行后c的值为1;STEP2:综合上述1,2可知由于此时没有碰到任何break语句也没有到switch语句的作用域结束(因为这个default语句是放在第一个的)所以它接着向后执行case2后的语句(此时编译器已经不看满不满足case标签了)此时执行语句c++;执行后c的值为2;遇到break语句跳出switch语句。STEP3:当i=2时,由于i满足case2的情况,所以直接从case2便签后的语句开始执行,此时执行语句c++,执行后c的值为3,遇到break语句跳出switch语句。STEP4:当i=3时,跳出for循环输出c=3;(上述过程为本人用VisualStudio2015单步调试并结合资料得出的结论)
                            
查看完整回答
1 反对 回复 2019-05-25
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

当i=1时候进入default:c=1没有break所以继续向下匹配case2得c=2break当i=2时候优先匹配case2进入case2:c=3break当i=3时候循环不成立。输出c为3
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 2252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信