C 語言控制結構進階:switch 多重選擇、三種迴圈比較與 break/continue 流程控制
switch 語句
switch (expr) {
case val1: stmt1; break;
case val2: stmt2; break;
default: stmt_def;
}
expr 必須為整數型別 (含 char、enum)。
case 值必須為常數運算式。
- 無
break 會貫穿執行下一 case。
default 可置頂、中、底,建議置底。
三種迴圈詳細比較
| 特性 | while | do-while | for |
| 判斷時機 | 迴圈前 | 迴圈後 | 迴圈前 |
| 最少執行次數 | 0 | 1 | 0 |
| 適用場景 | 次數未知、條件複雜 | 至少執行一次 (如選單) | 次數已知、計數器迴圈 |
| 語法結構 | while(cond) {} | do {} while(cond); | for(init; cond; step) {} |
for 迴圈執行順序
for (init; cond; step) body;
// 1. init
// 2. cond → 假跳出
// 3. body
// 4. step
// 5. 跳回 2
跳轉語句
break:跳出最近的 switch 或迴圈。
continue:跳過本次迴圈剩餘,直接執行 step (for) 或判斷 (while/do-while)。
goto label:無條件跳轉,慎用 (可用於多層迴圈跳出、錯誤處理集中)。
範例:1 到 100 求和
// for
int sum = 0;
for (int i=1; i<=100; ++i) sum += i;
// while
int i=1, sum=0;
while (i<=100) { sum+=i; ++i; }
// do-while (至少加一次)
int i=1, sum=0;
do { sum+=i; ++i; } while (i<=100);
建議
- 已知次數用
for,未知用 while,選單用 do-while。
- 避免在迴圈中修改計數器 (除非極度必要)。
goto 僅用於錯誤處理 goto cleanup; 模式。