Linux C - C基礎篇四(switch case語(yǔ)句)
多層嵌套的 if-else 語(yǔ)句在語(yǔ)法上是正確的,但邏輯上卻沒(méi)有正確地表達程序員的意圖,例如,意料之外的 else-if 更可能不會(huì )注意到而被溜過(guò)去;C語(yǔ)言還提供了另一種用于多分支選擇的switch語(yǔ)句,作為一種在一組互斥的項目中做選擇的替代方法,根據變量的不同取值來(lái)執行不同的代碼塊。其一般形式為:
switch(表達式){
case 表達式1: 語(yǔ)句1;
case 表達式2: 語(yǔ)句2;
…
case 表達式n: 語(yǔ)句n;
default: 語(yǔ)句n+1;
}
計算表達式的值,然后逐個(gè)與case后的表達式值進(jìn)行比較,當case后的表達式的值與switch表達式的值相等時(shí), 即執行對應case后的語(yǔ)句,然后不再進(jìn)行判斷,繼續執行后面所有case后的語(yǔ)句。如表達式的值與所有case后的常量表達式均不相同時(shí),則執行default后的語(yǔ)句。
int main(void){
int a;
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
default:printf("error\n");
}
return 0;
}
如果我們輸入1,case 1:后面的語(yǔ)句開(kāi)始執行,但是程序并沒(méi)有再執行這條語(yǔ)句后停止,而是繼續執行下面的case語(yǔ)句,包括default,直到程序結束。這是因為我們必須顯式地告訴編譯器停止執行switch中的語(yǔ)句,這可以通過(guò)在switch語(yǔ)句內的每個(gè)執行單元后指定一個(gè)break語(yǔ)句來(lái)完成 在大多數條件下一個(gè) case標簽的最后一條語(yǔ)句是break。當遇到 break 語(yǔ)句switch語(yǔ)句被終止。正確的代碼如下:
int main(void){
int a;
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n"); break;
case 4:printf("Thursday\n"); break;
default:printf("error\n");
}
return 0;
}
那么程序員什么時(shí)候希望省略 break 語(yǔ)句?如果多個(gè) case 語(yǔ)句都執行相同的功能代碼時(shí),允許程序執行多個(gè) case 標簽!例如輸入學(xué)生成績(jì),大于90分為優(yōu),大于70分為一般,大于60分為良,小于60分為差,可用以下代碼實(shí)現:
int main(void){
int score;
scanf("%d",&score);
switch (score/10){
case 10:
case 9: printf("優(yōu)\n"); break;
case 8:
case 7: printf("一般\n"); break;
case 6:printf("良\n"); break;
default:printf("差\n");
}
return 0;
}
把case標簽一個(gè)接一個(gè)堆起來(lái),以強調這種情形代表的是一個(gè)要被匹配的范圍,例如case10和case9為一組,超市score/10等于10或者9,即90分以上的條件。
總結:
在case后的各常量表達式的值不能相同,否則會(huì )導致編譯錯誤。
在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。
所有的case都是"或"or的關(guān)系,每時(shí)每刻只有一個(gè)case會(huì )滿(mǎn)足條件。
每個(gè)case中的代碼執行完畢后,必須要用break 語(yǔ)句來(lái)阻止代碼自動(dòng)地向下一個(gè)case運行。
如果不寫(xiě) break 語(yǔ)句的話(huà),下面所有的 case 語(yǔ)句都會(huì )執行一遍。
請使用default關(guān)鍵詞來(lái)規定匹配不存在時(shí)做的事情??墒÷圆粚?xiě)。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。