最近笔试总是遇到switch...case没有匹配break的题型,在这里做一个总结。

ps:平时编码中,一定要注意编码规范,每个case都写好对应的break,不要学习这种骚操作,稍不注意就可能出现bug!

switch...case的三个规则:

(1)既无成功匹配,又无default子句,那么swtich语句块什么也不做;

(2)无成功匹配,但有default,那么swtich语句块做default语句块的事;

(3)有成功匹配,没有break,那么成功匹配后,一直执行,直到遇到break。

通俗一点说,就是:

我只找我想要的case,其他的都不管(直接注释掉这个case前面的所有语句)。

找到我想要的case后,我就不再看其他case了(直接注释掉这个case后面的其他"case"关键字)。

找到我想要的case后,我只管执行后面代码,直到遇到break后跳出switch语句块。

例1:无成功匹配,无default

#include

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

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

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