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

C語言三層循環死循環排查:循環變量誤用導致程序卡死

     編輯:程式設計綜合問答

問題代碼

for (i = 1; i <= 4; i++)
    for (j = 1; j <= 4; j++)
        for (k = 1; k <= 4; j++)  // 錯誤:應為 k++
            if (i != j && i != k && j != k)
                printf("%d%d%d", i, j, k);

錯誤原因

最內層循環 **遞增變量寫錯**:`j++` 而非 `k++`。

  • 外層 `i`、中層 `j` 正常遞增
  • 內層 `k` **永遠為 1**(初始值),條件 `k <= 4` 永真
  • 但 `j` 在內層被遞增,導致中層循環提前結束,邏輯完全亂套
  • 程序陷入**無限循環**,無輸出,CPU 佔用 100%

修正代碼

for (i = 1; i <= 4; i++)
    for (j = 1; j <= 4; j++)
        for (k = 1; k <= 4; k++)  // 修正:k++
            if (i != j && i != k && j != k)
                printf("%d%d%d ", i, j, k); // 加空格分隔

輸出結果

123 124 132 134 142 143 
213 214 231 234 241 243 
312 314 321 324 341 342 
412 413 421 423 431 432 
// 共 24 種排列 (P(4,3) = 4*3*2 = 24)

避坑技巧

  • **統一縮進與大括號**:即使單語句也加 `{ }`,清晰界定作用域
  • **變量命名語義化**:`row, col, depth` 優於 `i, j, k`
  • **調試技巧**:在循環內打印變量值,或使用 IDE 斷點觀察變量變化
  • **靜態分析工具**:Clang Static Analyzer、Cppcheck 可自動檢測「循環變量未更新」等問題

舉一反三:常見循環變量錯誤

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤類型示例後果
遞增變量錯誤`for(k=0;k死循環/邏輯錯誤
條件判錯變量`for(i=0;i死循環/越界
嵌套循環重用變量內外層同用 `i`外層循環被內層修改
無符號整數反向循環`for(size_t i=n;i>=0;i--)`死循環 (i 永遠 >=0)