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

C語言 while 與 do-while 循環完全指南:差異、break/continue、無限循環模式

     編輯:關於C語言

while 循環:先判斷後執行


int i = 0;
while (i < 10) {
    i++;
    printf("%d\n", i);
}
// 輸出 1~10
  • 條件為真(非零)執行循環體。
  • 可能零次執行:若初始條件為假,循環體不執行。

do-while 循環:先執行後判斷


int i = 0;
do {
    i++;
    printf("%d\n", i);
} while (i < 10);
// 輸出 1~10
  • 無條件執行一次循環體,再判斷條件。
  • 至少執行一次:即使條件初始為假。

核心差異對比


int i = 10;
while (i < 10)  { printf("while"); }      // 不執行
do { printf("do while"); } while (i < 10); // 執行一次
特性whiledo-while
判斷時機循環開始前循環結束後
最少執行次數01
適用場景需先檢查條件至少需執行一次(如菜單輸入)
條件語法while(expr)do stmt while(expr); (注意分號)

break 與 continue 控制流


int i = 0;
while (i < 10) {
    i++;
    if (i == 8) break;      // 直接跳出整個循環
    if (i % 2 == 0) continue; // 跳過本次剩餘,進入下一次判斷
    printf("%d\n", i);      // 僅輸出奇數 1,3,5,7
}
  • break:跳出當前層循環或 switch。
  • continue:跳過本次循環體剩餘部分,直接進行下一次條件判斷(for 則執行遞增表達式)。

無限循環模式

while(1) / while(!0)


int i = 0;
while (1) {
    i++;
    printf("%d\n", i);
    if (i == 100) break;
}
  • 條件恆為真,必須在循環體內用 break、return、exit 跳出。
  • 適用於事件循環、服務器主循環、菜單系統。

for(;;) 等價寫法


for (;;) { /* ... */ }  // 三表達式全省略,同 while(1)

常見陷阱與避坑

  1. 分號陷阱:while (i < 10); 空循環體 → 死循環(若 i 不變)。
  2. do-while 必須以分號結尾:} while (cond); 缺分號為語法錯誤。
  3. continue 在 while 中不執行遞增:若遞增在 continue 之後,會導致死循環。
    
    while (i < 10) {
        if (i == 5) continue;
        i++;  // i==5 時不執行 → 死循環
    }
    
    解決:遞增前置或用 for 循環。
  4. 浮點數作為循環條件:精度問題導致次數不準,避免使用。

while vs for 選擇指南

場景推薦理由
已知循環次數/計數器for初始化/條件/遞增集中,不易漏寫
條件複雜/非計數while語義清晰:當條件滿足時持續
至少一次執行do-while語法保證首次執行
事件驅動/無限循環while(1) / for(;;)慣用模式,意圖明確

總結

while(先判後執,可零次)、do-while(先執後判,至少一次)、for(計數循環首選)構成 C 循環三大支柱。掌握 break/continue 語義差異、無限循環模式與常見陷阱(分號、continue 位置、浮點條件),能寫出正確、高效、可讀的循環代碼。

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