// 1. 直接用在 if → 錯誤
if (1) { break; } // compile error: break statement not within loop or switch
// 2. if 在 for 內 → break 跳出 for
for (int i = 0; i < 3; i++) {
if (i == 1) break; // 跳出 for,i=1 時結束循環
printf("i=%d\n", i); // 輸出 i=0
}
// 3. 多層 for 嵌套
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (j == 2) break; // 僅跳出內層 j 循環
printf("j=%d ", j); // 每輪輸出 j=0 1
}
printf("| "); // 內層 break 後執行此處
}
// 輸出: j=0 1 | j=0 1 | j=0 1 |
// 4. 多層 switch 嵌套
switch (x) {
case 1:
switch (y) {
case 0: a++; break; // 跳出內層 switch
case 1: b++; break;
}
b = 100; break; // 跳出外層 switch
case 2: a++; b++; break;
}
// x=1,y=0 → a=1, b=100 (內層 break 後執行外層 case 1 後續語句 b=100,再外層 break)
for:跳過本輪餘下語句 → 執行 increment 表達式 → 檢查 condition。while/do-while:跳過本輪餘下語句 → 直接檢查 condition。// for 循環
for (int i = 0; i < 5; i++) {
if (i % 2 == 0) continue; // 跳過偶數
printf("%d ", i); // 僅輸出 1 3
}
// while 循環
int i = 0;
while (i < 5) {
i++;
if (i == 3) continue; // 跳過 3
printf("%d ", i); // 輸出 1 2 4 5
}
// 結構化示例:處理有效輸入
while (scanf("%d", &x) == 1) {
if (x < 0) continue; // 忽略負數
if (x > 100) continue; // 忽略過大
process(x);
}
問題:scanf("%d", &i); 用戶輸入 "abc" → 匹配失敗,'a' 殘留輸入緩衝區 → 後續 scanf 死循環讀 'a' 失敗。
int i, ch;
printf("Enter integer: ");
if (scanf("%d", &i) != 1) { // 輸入非整數
// 清理緩衝區直到換行
while ((ch = getchar()) != '\n' && ch != EOF)
; // 空語句
printf("Invalid input!\n");
} else {
printf("You entered: %d\n", i);
}
關鍵點: getchar() 逐字符讀取並丟棄,直到 '\n' 或 EOF。continue 在此處僅作空循環體佔位,可寫為 ; 或 {}。
switch **不是循環**,continue 在 switch 中**非法** (除非 switch 在循環內,且 continue 屬於外層循環)。break 在 switch 中**必須**用於防止貫穿,否則 90% 是邏輯 Bug。break 用在 if/函數塊 → 編譯錯誤。break 跳出多層循環 → 需用標誌位、goto、重構函數返回、C++ 异常 (慎用)。continue 用在 switch (非循環上下文) → 編譯錯誤。for 循環中 continue 前修改循環變量 → 仍會執行 increment 表達式,可能導致雙重修改邏輯錯誤。continue 做衛語句過濾,主流程無縮進,可讀性強。| 特性 | break | continue |
|---|---|---|
| 適用位置 | 循環、switch | 僅循環 |
| 效果 | 終止整個循環/switch | 結束本輪迭代,進入下輪判斷 |
| 嵌套作用域 | 僅最近一層 | 僅最近一層循環 |
| switch 中 | 必需 (防貫穿) | 非法 |
| for 循環後續 | 不執行 increment | **執行** increment 表達式 |
熟練掌握 break/continue 的作用域邊界、嵌套行為、switch 特殊語義,配合 scanf 輸入清理等實戰模式,能寫出流程清晰、邏輯正確、抗干擾能力強的循環控制代碼。