首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言迴圈陷阱:為什麼這段 while 迴圈不是執行 6 次?

     編輯:程式設計綜合問答

經典 C 語言面試題:分析下列程式碼為何導致無限迴圈而非預期的 6 次執行。

問題程式碼

int main() {
    int i = 0;
    while (i < 10) {
        if (i < 1) continue;
        if (i == 5) break;
        i++;
    }
    return 0;
}

逐步追蹤分析

迴圈次數i 初值i < 1?continue?i == 5?i++?i 末值
10真是 → 跳過後續-否0
20真是 → 跳過後續-否0
...0真是 → 永遠跳過-否0

核心問題

if (i < 1) continue; 導致 i++ 永遠不執行,i 永遠保持 0,形成無限迴圈。

修正版本

// 版本一:調整條件順序
int i = 0;
while (i < 10) {
    if (i == 5) break;
    i++;
    if (i < 1) continue; // 這行其實多餘,i 從 0 開始遞增永不小於 1
}

// 版本二:預期邏輯 (執行 6 次: i=0,1,2,3,4,5 時 break)
int i = 0;
while (i < 10) {
    if (i == 5) break;
    printf("i = %d\n", i);
    i++;
}

關鍵教訓

  • continue 會跳過本次迴圈剩餘所有語句,包含遞增操作
  • 迴圈變數更新務必置於 continue 可能跳過的路徑之外
  • 除錯技巧:在關鍵位置加 printf 追蹤變數值

總結

這不是迴圈次數計算錯誤,而是控制流程邏輯錯誤導致無限迴圈。理解 continue 的跳過範圍,是避免此類 Bug 的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved