C - 开关语句 - 输出差异



我对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;
}

最新更新