當年學C語言switch開關語句的時候,很多人會告訴你它是這么用的:
-
switch(表達式){
-
-
case常量表達式1: 語句1;break;
-
-
case常量表達式2: 語句2;break;
-
-
…
-
-
case常量表達式n: 語句n;break;
-
default: 語句n+1;break;
-
其語義是:計算表達式的值。並逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時,即執行其后的語句,然后不再進行判斷,繼續執行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。
很多人當時都是這么理解的吧。
好,我們來看這樣一個程序
-
#include <stdio.h>
-
-
int main()
-
{
-
int c=
0, k;
-
for (k =
1; k <
3; k++)
-
switch (k)
-
{
-
default:c += k;
-
case
2:
-
c++;
break;
-
case
4:
-
c +=
2;
break;
-
}
-
printf(
"%d",c);
-
return
0;
-
}
你覺得答案會是多少?
答案是3。
分析一下這個題目,首先看上去第一眼就很怪,怎么把default放在第一句了。那么程序是怎么執行的呢?
當k=1的時候,c+=k ——>c=1 這個時候要注意了,default后面並沒有break,所以並不會跳出去,會執行case2,c++
——>c=2,遇到break,跳出。
當k=2的時候,執行case2 ,c++——>c=3;遇到break,跳出。
所以這里總結一下default的用法:
如果default語句在所有case最后,此時可以不加break 如果default語句之后還有case語句,如果不加break,則default語句執行過之后會繼續下面的case語句,此時必須要在default之后加break語句,不過這種default用法是不推薦的,default顧名思義是缺省情況,只有任何條件都不匹配的情況下才會執行,所以應該將default語句放在所有case結束之后
