循環是程序控制流的核心。本文基於 Objective-C(兼容 C)語法,系統梳理 for、while、do-while 三大循環結構的執行流程、嵌套中 break/continue 的作用域規則,並對比常見陷阱。
for (初始化表達式; 循環條件; 循環後表達式) {
循環體語句;
}
非 0 (真) 進入循環體,0 (假) 結束循環。{} 包裹。i++ 等)。
// 多變量初始化/更新(逗號運算符)
for (int i = 0, j = 10; i < j; i++, j--) { ... }
// 無限循環
for (;;) { ... } // 等價 while(1)
// 範圍基礎 for (需 C++/Objective-C++ 或 C23,標準 C 不支持)
// for (int x : array) { ... } // 僅作了解
while (循環條件) {
循環體語句;
}
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
do {
循環體語句;
} while (循環條件);
;。| 關鍵字 | 作用範圍 | 嵌套循環行為 | 典型用例 |
|---|---|---|---|
break |
**僅離開當前最內層循環** | 外層循環繼續執行 | 找到目標提前退出搜索 |
continue |
**跳過本次循環剩餘語句,直接進入下一次迭代判斷** | 僅影響當前層循環 | 過濾無效數據繼續處理 |
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) break; // 僅跳出內層 j 循環
NSLog(@"i=%d, j=%d", i, j);
}
}
// 輸出:(0,0) (1,0) (2,0) → 外層 i 完整執行了 3 次
C/OC 無 break label,常用方案:
bool found = false;
for (int i = 0; i < n && !found; i++) {
for (int j = 0; j < m; j++) {
if (target == a[i][j]) { found = true; break; }
}
}
return 直接退出。| 陷阱 | 錯誤代碼 | 修正方案 |
|---|---|---|
| for 循環條件判斷寫賦值 | for (i = 0; i = 10; i++) |
for (i = 0; i < 10; i++) 或 for (i = 0; i != 10; i++) |
| 循環變量類型溢出導致死循環 | for (unsigned i = 10; i >= 0; i--) |
用有符號 int,或改寫 for (int i = 10; i-- > 0; ) |
| 浮點數作為循環計數器 | for (float f = 0.0; f != 1.0; f += 0.1) |
用整數計數,循環內換算浮點值 |
| 循環體為空語句 | while (getchar() != '\n'); |
加註釋 /* intentional empty */ 或用 {} |
{} 包裹循環體,避免維護時語句誤入/誤出。