首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 循環結構核心筆記:for/while/do-while 與 break/continue 深度解析

     編輯:關於C語言

前言

循環是程序控制流的核心。本文基於 Objective-C(兼容 C)語法,系統梳理 for、while、do-while 三大循環結構的執行流程、嵌套中 break/continue 的作用域規則,並對比常見陷阱。

一、for 循環:標準四步執行流程

1.1 語法結構


for (初始化表達式; 循環條件; 循環後表達式) {
    循環體語句;
}

1.2 執行步驟(關鍵面試考點)

  1. 求初始化表達式值:僅執行一次,通常聲明並初始化循環變量。
  2. 求循環條件值:非 0 (真) 進入循環體,0 (假) 結束循環。
  3. 執行循環體語句:可包含多條語句,建議始終用 {} 包裹。
  4. 求循環後表達式值:通常更新循環變量(i++ 等)。
  5. 返回步驟 2:繼續判斷條件。

1.3 進階用法


// 多變量初始化/更新(逗號運算符)
for (int i = 0, j = 10; i < j; i++, j--) { ... }

// 無限循環
for (;;) { ... } // 等價 while(1)

// 範圍基礎 for (需 C++/Objective-C++ 或 C23,標準 C 不支持)
// for (int x : array) { ... } // 僅作了解

二、while 循環:前置判斷的靈活結構

2.1 語法與流程


while (循環條件) {
    循環體語句;
}
  • 屬於 當型循環:先判斷條件,真才執行體,可能零次執行。
  • 適用於「次數未知、由條件驅動」的場景(如讀取文件直到 EOF)。

2.2 經典模式:讀取輸入流


int c;
while ((c = getchar()) != EOF) {
    putchar(c);
}

三、do-while 循環:後置判斷的「至少一次」保證

3.1 語法與流程


do {
    循環體語句;
} while (循環條件);
  • 屬於 直到型循環:無條件執行一次循環體,再判斷條件決定是否繼續。
  • 適用於「菜單交互、至少執行一次業務」場景。

3.2 注意事項

  • 條件判斷在 循環體之後,變量作用域需提前聲明。
  • 別漏掉結尾的 分號 ;。

四、break 與 continue:嵌套循環中的控制流藝術

關鍵字 作用範圍 嵌套循環行為 典型用例
break **僅離開當前最內層循環** 外層循環繼續執行 找到目標提前退出搜索
continue **跳過本次循環剩餘語句,直接進入下一次迭代判斷** 僅影響當前層循環 過濾無效數據繼續處理

4.1 實戰示例:嵌套循環中 break


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 次

4.2 跳出多層循環的標準模式

C/OC 無 break label,常用方案:

  1. 標誌變量法:
    
    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; }
        }
    }
    
  2. 函數封裝法(推薦):將嵌套循環提取為函數,用 return 直接退出。
  3. goto 法(慎用):極簡場景下可接受,但破壞結構化編程。

五、常見陷阱與最佳實踐

陷阱 錯誤代碼 修正方案
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 */ 或用 {}

總結

  • for:已知次數、計數器驅動首選。
  • while:未知次數、條件驅動、可能零次執行。
  • do-while:至少執行一次、菜單/交互首選。
  • break/continue 只作用於**最內層**循環,跳出多層請用標誌變量或函數封裝。
  • 始終用 {} 包裹循環體,避免維護時語句誤入/誤出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved