break - 跳出整個循環
- 用於
while/for/switch
- 遇到即終止當前層循環,執行循環後首條語句
- 常與
if 配合:滿足條件時退出
示例 1:死循環計算 1+...+100
int i = 1, sum = 0;
while (1) {
sum += i;
i++;
if (i > 100) break; // 第 100 次後 i=101,退出
}
printf("%d\n", sum); // 5050
示例 2:多層循環輸出 4×4 矩陣
int i = 1, j;
while (1) { // 外層
j = 1;
while (1) { // 內層
printf("%-4d", i * j);
j++;
if (j > 4) break; // 跳出內層
}
printf("\n");
i++;
if (i > 4) break; // 跳出外層
}
運行結果
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
多層循環關鍵:break 只跳出一層
- 內層
break → 外層繼續下一次迭代
- 外層
break → 整個雙重循環結束
- 需跳出多層:用標誌變量、
goto(慎用)、重構為函數 return
continue - 跳過本次迭代
- 僅用於
while/for
- 跳過循環體剩餘部分,直接進入下一次判斷/迭代
- 常與
if 配合:滿足條件時跳過
示例:過濾輸入中的 4 和 5
char c = 0;
while (c != '\n') {
c = getchar(); // 讀取字符
if (c == '4' || c == '5') continue; // 跳過 putchar
putchar(c); // 輸出其他字符
}
運行演示
輸入:0123456789
輸出:01236789
執行流程
- 讀 '0' → 不滿足 if → 輸出 '0'
- 讀 '4' → 滿足 if →
continue → 跳過 putchar → 直接下一次循環
- 讀 '5' → 同理跳過
- ...直到讀 '\n' → 循環條件不成立 → 結束
break vs continue 核心對比
| 維度 | break | continue |
| 作用範圍 | 結束整個循環 | 結束本次迭代 |
| 後續執行 | 循環後代碼 | 下一次迭代(條件判斷) |
| 循環變量 | 不再更新 | for 仍執行迭代表達式 |
| 適用場景 | 找到目標、錯誤退出、菜單返回 | 過濾數據、跳過無效輸入、條件分支 |
for 循環中 continue 的特殊行為
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) continue;
printf("%d ", i); // 僅輸出奇數
}
// i 仍會正常 1→10 遞增,continue 不阻止 i++
最佳實踐
- 優先用循環條件自然結束,減少 break/continue
- break 用於異常/提前終止場景
- continue 用於數據過濾/分支跳過
- 避免深層嵌套中的 break/continue,提取函數用 return
- 多層跳出需求時,考慮標誌變量或函數封裝