回覆列表
  • 1 # 多加點香菜否

    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;

    }

    ```

  • 中秋節和大豐收的關聯?
  • 《賽爾號》混沌教派會不會因隕星議會後倒臺?