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

C 語言 while 迴圈與 for 迴圈相互轉換完全指南

     編輯:關於C語言

核心等價關係

/* for 迴圈 */
for (init; condition; step) {
    body;
}

/* 等價 while 迴圈 */
init;
while (condition) {
    body;
    step;
}

三段式對應表

for 子句while 對應位置執行時機
initwhile 之前僅一次,迴圈開始前
conditionwhile (condition)每次迴圈開始前判斷
step迴圈主體結尾每次迴圈結束後執行

範例 1:1 到 10 累加

for 版本

int sum = 0;
for (int i = 1; i <= 10; ++i) {
    sum += i;
}

while 版本

int sum = 0;
int i = 1;                 // init
while (i <= 10) {          // condition
    sum += i;              // body
    ++i;                   // step
}

範例 2:無限迴圈

for (;;) { ... }    // 慣用寫法
while (1) { ... }   // 等價

關鍵差異與陷阱

1. 變數作用域

for (int i = 0; i < 10; ++i) { /* i 僅在 for 內可見 */ }
while (i < 10) { ... }          // 錯誤:i 不在作用域

for 迴圈宣告的變數作用域限制在迴圈內 (C99),while 需自行管理。

2. continue 行為差異

for (int i = 0; i < 10; ++i) {
    if (i == 5) continue;
    printf("%d ", i);
    // continue 仍會執行 ++i (step 子句)
}

int i = 0;
while (i < 10) {
    if (i == 5) { ++i; continue; }  // 必須手動執行 step 否則無限迴圈!
    printf("%d ", i);
    ++i;
}

鐵律:`while` 中使用 `continue` 時,**必須確保 step 邏輯已執行**,否則陷入無限迴圈。

3. 空初始化/步進

int i = 0;
for (; i < 10; ) { ... }  // 合法:init/step 可為空
while (i < 10) { ... }    // 等價

選擇指南

場景推薦理由
已知迴圈次數 / 計數器驅動for三段式集中,作用域自動管理,不易漏寫 step
條件驅動 / 不定次數 / 複雜終止條件while語意更清晰:當條件成立時持續執行
至少執行一次do-while條件在結尾判斷
雙重巢狀迴圈外層需控制內層變數視情況for 方便重置內層計數器

進階:for 迴圈的隱藏功能

// 多重初始化/步進 (逗號運算子)
for (int i = 0, j = 10; i < j; ++i, --j) { ... }

// 範圍基礎 for (C++20 / GNU 擴展非標準)
// C 標準無此功能,需手寫

結語

for 與 while **圖靈完備等價**,但**工程語意不同**。掌握三段式對應、continue 差異、作用域規則,根據「計數器 vs 條件」語意選擇,才能寫出更少 Bug、更易讀的代碼。

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