C 語言流程控制 (Control Flow)

電腦程式預設是從第一行執行到最後一行。但在現實世界中,我們常需要做決定:如果下雨,就帶傘;否則,戴帽子。這就是流程控制。

C 語言主要提供兩種決策機制:if-elseswitch

if...else 判斷式

最基本的邏輯判斷。

1. 單一 if

如果條件為真 (True),就執行大括號內的程式碼。

int score = 85;

if (score >= 60) {
    printf("及格!\n");
}

2. if...else

如果條件為真,執行 A;否則,執行 B。

if (score >= 60) {
    printf("及格!\n");
} else {
    printf("不及格,請加油。\n");
}

3. if...else if...else

多重條件判斷。

if (score >= 90) {
    printf("等級 A\n");
} else if (score >= 80) {
    printf("等級 B\n");
} else if (score >= 60) {
    printf("等級 C\n");
} else {
    printf("等級 F\n");
}

Switch 選擇結構

當你要判斷的變數是整數字元,且有多個固定的數值要比對時,switch 比多個 if-else 更簡潔。

char grade = 'B';

switch (grade) {
    case 'A':
        printf("優秀!\n");
        break; // 記得要 break,否則會繼續執行下一個 case
    case 'B':
    case 'C':
        printf("做得好!\n");
        break;
    case 'D':
        printf("及格邊緣。\n");
        break;
    case 'F':
        printf("請重新嘗試。\n");
        break;
    default:
        printf("無效的等級。\n"); // 當上述 case 都不符合時執行
}
重要概念switch 中的 break 很重要。如果沒寫 break,程式會發生 Fall-through (貫穿) 現象,也就是會繼續執行下一個 case 的程式碼,直到遇到 breakswitch 結束。有時候我們會故意利用這個特性(如上述 case 'B'case 'C' 共用輸出)。

巢狀判斷 (Nested If)

if 裡面還可以再包另一個 if

int num = 10;

if (num > 0) {
    if (num % 2 == 0) {
        printf("正偶數\n");
    } else {
        printf("正奇數\n");
    }
}