C++ Switch语句 求解答!

第一个Switch语句做完后m=1
因为没有break 所以进入第二个Switch语句
但是第二个Switch语句怎么做呀
为什么正确答案是3呢?

img

default没有break,所以下边m++也运行

是因为defult之后没有break,所以应该得3

a%3=1,所以会执行case 1,m++后m为1
b%2=1,所以执行default,m++后m为2,但由于default没有加break,因此继续执行case 0,m++使得m为3,最后输出m就是3了

switch (a%3) → a为16,a%3为1 → 执行 case 1 → m初值为0,m++为1。注意,这里case1 并没有break,所以会继续向下执行完整个switch (a%3) → 执行switch (b%2) → b为21,b%2为1 → 执行default → m为1,m++为2 → 注意这里依然会继续执行case0 → m++为3,break跳出switch (b%2) → switch (a%3)语句结束 → 执行printf,此时m为3。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章讲的很详细,请看:声明不能包含标签 运用switch结构出现的错误
  • 除此之外, 这篇博客: switch 语句的简单使用中的 switch 语句中需要注意的问题: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1.switch 括号里面只能放整数
    2.break语句不能遗漏 ,假如遗漏了,那么程序会继续往下开始执行,
    3.不太能表达相对复杂的结构
    4.switch里面也支持嵌套,但是一般不用
    运行机理:
    switch中的表达式结果会找对应的case匹配,如果匹配成功就找对应的的case执行
    直到遇到break结束,如果case都不匹配,会直接执行default后面的语句


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^