最近笔试总是遇到switch...case没有匹配break的题型,在这里做一个总结。
ps:平时编码中,一定要注意编码规范,每个case都写好对应的break,不要学习这种骚操作,稍不注意就可能出现bug!
(1)既无成功匹配,又无default子句,那么swtich语句块什么也不做;
(2)无成功匹配,但有default,那么swtich语句块做default语句块的事;
(3)有成功匹配,没有break,那么成功匹配后,一直执行,直到遇到break。
通俗一点说,就是:
我只找我想要的case,其他的都不管(直接注释掉这个case前面的所有语句)。
找到我想要的case后,我就不再看其他case了(直接注释掉这个case后面的其他"case"关键字)。
找到我想要的case后,我只管执行后面代码,直到遇到break后跳出switch语句块。
例1:无成功匹配,无default
#include<stdio.h> int main() { int n = 5; switch (n){ case 1: printf("1"); break; case 2: printf("2"); case 3: printf("3"); } }输出结果:空
思路:有没有成功匹配(“case 5”)?没有。
再看看有没有default?没有。
直接退出switch语句块,所以输出为空。
例2 有成功匹配
int main() { int n = 5; switch (n){ case 1: printf("2"); case 2: printf("3"); case 5: printf("5"); } }输出结果:5
思路:有没有成功匹配(“case 5”)?有。
那么直接跳到case 5,然后执行printf("5");
语句块结束,最终输出为:5
例3 有成功匹配,无break
#include<stdio.h> int main() { int n = 5; switch (n){ case 1: printf("1"); case 2: printf("2"); case 5: printf("3"); case 3: printf("4"); break; case 7: printf("6"); } }输出结果:34
思路:有没有成功匹配(“case 5”)?有。
那么直接跳到case 5,然后执行printf("3");
由于已经成功匹配“case 5”,所以“case 3:”这行代码直接注释,执行printf("4");
遇到break,跳出switch语句块,执行结束。
例4:无成功匹配,有default,无break
#include<stdio.h> int main() { int n = 5; switch (n){ default: printf("1"); case 2: printf("2"); case 3: printf("3"); } }输出结果:123
步骤:有没有成功匹配(“case 5”)?没有。
再看看有没有default?有。
有default,那么执行default后面的语句,执行printf("1");
由于已经匹配“default”,所以“case 2:”这行代码直接注释,执行printf("2");
由于已经匹配“default”,所以“case 3:”这行代码直接注释,执行printf("3");
所以,最后的输出结果为:123