C 語言流程控制 (Control Flow)
電腦程式預設是從第一行執行到最後一行。但在現實世界中,我們常需要做決定:如果下雨,就帶傘;否則,戴帽子。這就是流程控制。
C 語言主要提供兩種決策機制:if-else 和 switch。
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 的程式碼,直到遇到 break 或 switch 結束。有時候我們會故意利用這個特性(如上述 case 'B' 和 case 'C' 共用輸出)。巢狀判斷 (Nested If)
if 裡面還可以再包另一個 if。
int num = 10;
if (num > 0) {
if (num % 2 == 0) {
printf("正偶數\n");
} else {
printf("正奇數\n");
}
}