switch語句允許測試變數與值列表的相等性,每個值稱之為案例或者`case`,程式會檢查switch後面的值並且與`case`後面的值比對,如果相等則執行後面的程式碼或程式碼塊
### 語法
`switch`在C語言中的語法如下
``` c
switch(expression) {
case constant-expression :
statement(s);
break; /* optional */
/* you can have any number of case statements */
default : /* Optional */
}
```
* switch語句中使用的表示式必須具是`int`或`enum`型別,否則如`float`等其他資料型別是無法透過的編譯的,因為編譯器需要switch後面的語句和case後面的值精確匹配,而計算機無法精確表達一個`float`資料型別
* switch可以任意個case語句(包括沒有), 值和語句之間使用`:`分隔
* case後面的值必須是`int`常量值,或者返回結果為`int`型別的表示式,以下程式碼無法編譯透過
switch (1) {
case 1.1:
break;
int a;
scanf("%d", &a);
switch (a) {
case a + 1:
* 當`switch`後面的變數值和`case`後面的常量值匹配相等後,`case`後面的程式碼將會被執行,直到`break`語句被執行後跳出`switch`程式碼塊
* `break`不是必須的,如果沒有`break`,則執行完當前`case`的程式碼塊後會繼續執行後面`case`程式碼塊的內容,直到執行`break`才可以退出
* switch有一個預設的情況,我們用`default`關鍵詞表示,當switch後面的變數和所有`case`後面的常量都不匹配的情況下,預設執行default後面的語句
![switch_statement](https://user-images.githubusercontent.com/32572119/50939402-ad440e80-14b7-11e9-8fc1-1f921eff22b5.jpg)
Example 1
#include <stdio.h>
int main () {
/* local variable definition */
char grade;
scanf("%c", &grade);
switch(grade) {
case "A" :
printf("Excellent!\n" );
case "B" :
case "C" :
printf("Well done\n" );
case "D" :
printf("You passed\n" );
case "F" :
printf("Better try again\n" );
default :
printf("Invalid grade\n" );
printf("Your grade is %c\n", grade );
return 0;
Example 2
``` C
int main() {
printf("Please input your grade(1-100):");
int grade;
scanf("%d", &grade);
switch (grade / 10) {
case 10:
case 9:
printf("A\n");
case 8:
case 7:
printf("B\n");
case 6:
case 5:
printf("C\n");
default:
switch語句允許測試變數與值列表的相等性,每個值稱之為案例或者`case`,程式會檢查switch後面的值並且與`case`後面的值比對,如果相等則執行後面的程式碼或程式碼塊
### 語法
`switch`在C語言中的語法如下
``` c
switch(expression) {
case constant-expression :
statement(s);
break; /* optional */
case constant-expression :
statement(s);
break; /* optional */
/* you can have any number of case statements */
default : /* Optional */
statement(s);
}
```
* switch語句中使用的表示式必須具是`int`或`enum`型別,否則如`float`等其他資料型別是無法透過的編譯的,因為編譯器需要switch後面的語句和case後面的值精確匹配,而計算機無法精確表達一個`float`資料型別
* switch可以任意個case語句(包括沒有), 值和語句之間使用`:`分隔
* case後面的值必須是`int`常量值,或者返回結果為`int`型別的表示式,以下程式碼無法編譯透過
``` c
switch (1) {
case 1.1:
break;
}
```
``` c
int a;
scanf("%d", &a);
switch (a) {
case a + 1:
break;
}
```
* 當`switch`後面的變數值和`case`後面的常量值匹配相等後,`case`後面的程式碼將會被執行,直到`break`語句被執行後跳出`switch`程式碼塊
* `break`不是必須的,如果沒有`break`,則執行完當前`case`的程式碼塊後會繼續執行後面`case`程式碼塊的內容,直到執行`break`才可以退出
* switch有一個預設的情況,我們用`default`關鍵詞表示,當switch後面的變數和所有`case`後面的常量都不匹配的情況下,預設執行default後面的語句
![switch_statement](https://user-images.githubusercontent.com/32572119/50939402-ad440e80-14b7-11e9-8fc1-1f921eff22b5.jpg)
Example 1
``` c
#include <stdio.h>
int main () {
/* local variable definition */
char grade;
scanf("%c", &grade);
switch(grade) {
case "A" :
printf("Excellent!\n" );
break;
case "B" :
case "C" :
printf("Well done\n" );
break;
case "D" :
printf("You passed\n" );
break;
case "F" :
printf("Better try again\n" );
break;
default :
printf("Invalid grade\n" );
}
printf("Your grade is %c\n", grade );
return 0;
}
```
Example 2
``` C
#include <stdio.h>
int main() {
printf("Please input your grade(1-100):");
int grade;
scanf("%d", &grade);
switch (grade / 10) {
case 10:
case 9:
printf("A\n");
break;
case 8:
case 7:
printf("B\n");
break;
case 6:
case 5:
printf("C\n");
break;
default:
break;
}
return 0;
}
```