記得看一段windows上的代碼時遇到過這樣的情況:在switch語句中得所有case之前加入了一個if語句的判斷,當時很奇怪爲什麼在任何條件下都沒有執行,後來才明白是自己理解錯了switch的語法。
switch語句的語法如下:
switch(expression)
{
case constant1:
statement sequence;
break;
case constant2:
statement sequence;
break;
...
default:
statement sequence;
break;
}
語法會對expression進行case上的匹配,匹配成功則直接執行對應case中的語句,並不會流程般的執行其上或下得語句。
列舉一個實例:
# include <stdio.h>
void main()
{
char ch;
scanf("%c", &ch);
switch(ch)
{
printf("test switch\n"); /*這條語句是不會被執行到的*/
case 'a':
printf("case : %c\n", ch);
break;
case 'b':
printf("case : %c\n", ch);
break;
case 'c':
printf("case : %c\n", ch);
break;
default:
printf("case : not a/b/c\n", ch);
break;
}
}
執行情況如下:
可以看到,case之上的語句雖然在所有的case之前,但是switch匹配後並沒有執行printf語句。