我对switch语句不太熟悉。
//S1
switch(ch) {
case 'a': printf("eh? "); break;
case 'e': printf("eee "); break;
case 'i': printf("eye "); break;
case 'o': printf("ohh "); break;
case 'u': printf("you "); break;
}
//S2
switch(ch) {
case 'a': printf("eh? ");
case 'e': printf("eee ");
case 'i': printf("eye ");
case 'o': printf("ohh ");
case 'u': printf("you ");
}
这两个代码块之间的输出是否有差异?你能解释一下为什么吗?
是的,有区别。
如果与switch
匹配的条件位于最顶层的case
语句中,并且您没有在其末尾放置break
(或return
(。它将失败(在状态中执行它下面的所有语句(。
例如在交换机中:
switch(ch) {
case 'a': printf("eh? ");
case 'e': printf("eee ");
case 'i': printf("eye ");
case 'o': printf("ohh ");
case 'u': printf("you ");
}
如果ch
等于i
,则打印输出将eye ohh you
如果在语句switch case
没有break
,则第一个匹配case
之后的所有语句都将被执行。S2 没有任何break
语句,因此,如果ch = a
,S2 将执行其下的所有语句,打印eh? eee eye ohh you
.
是的,有区别。在你的第一句话中:
switch(ch) {
case 'a': printf("eh? "); break;
它会在这里中断,只打印"嗯?它不会执行第二种情况"e"部分。
在你的第二句话中:
switch(ch) {
case 'a': printf("eh? ");
case 'e': printf("eee ");
case 'i': printf("eye ");
case 'o': printf("ohh ");
case 'u': printf("you ");
}
如果选择案例"a">,它将执行"a"以及之后的每个案例,因为此语句中没有中断。它将打印"嗯?哎呀��
如果您选择案例"i">,它将执行案例"i"以及之后打印"eye oh you"的每个案例。
我想建议的另一件事是,将"A"和"a"两种情况都拿来。 您可以通过以下方式做到这一点:
switch(ch) {
case 'a':case 'A': printf("eh? "); break;
case 'e':case 'E': printf("eee "); break;
case 'i':case 'I': printf("eye "); break;
case 'o':case 'O': printf("ohh "); break;
case 'u':case 'U': printf("you "); break;
default: break;
}