第一个Switch语句做完后m=1
因为没有break 所以进入第二个Switch语句
但是第二个Switch语句怎么做呀
为什么正确答案是3呢?
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。
不知道你这个问题是否已经解决, 如果还没有解决的话:1.switch 括号里面只能放整数
2.break语句不能遗漏 ,假如遗漏了,那么程序会继续往下开始执行,
3.不太能表达相对复杂的结构
4.switch里面也支持嵌套,但是一般不用
运行机理:
switch中的表达式结果会找对应的case匹配,如果匹配成功就找对应的的case执行
直到遇到break结束,如果case都不匹配,会直接执行default后面的语句