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

C 語言 while 與 do-while 迴圈的核心差異與選用指南

     編輯:C 語言問答

核心差異:判斷時機

這是兩者最本質的區別,決定了迴圈主體「至少執行一次」的可能性。

while 迴圈:先判斷,後執行 (零次或多次)

while (條件表達式) {
    迴圈主體語句;
}
  • 進入迴圈前先檢查條件。
  • 若初始條件為假 (0),迴圈主體一次也不會執行。
  • 適用於「不確定是否需要執行」的場景,如讀取檔案直到 EOF。

do-while 迴圈:先執行,後判斷 (至少一次)

do {
    迴圈主體語句;
} while (條件表達式);
  • 無條件先執行一次迴圈主體。
  • 執行完畢後,再檢查條件決定是否繼續。
  • 適用於「至少要執行一次」的場景,如選單輸入驗證、初始化流程。

語法結構對比

項目whiledo-while
關鍵字位置迴圈開始處迴圈結束處
分號結尾無 (大括號結束)有 (while(...); 必須加分號)
最小執行次數0 次1 次
條件為真意義繼續執行繼續執行

實務選用建議

選擇 while 的情況:

  • 資料處理前需先檢查條件 (如 while(fgets(buf, n, fp) != NULL))。
  • 計數器初始值可能已滿足結束條件。
  • 巢狀迴圈外層控制。

選擇 do-while 的情況:

  • 選單驅動程式:顯示選單 -> 讀取輸入 -> 驗證合法性。
  • 資源獲取與釋放:確保清理碼至少執行一次。
  • 數值運算迭代:如牛頓法求根,至少迭代一次再判斷收斂。

經典範例:使用者輸入驗證

int input;
do {
    printf("請輸入 1-10 之間的整數: ");
    scanf("%d", &input);
    if (input < 1 || input > 10) {
        printf("輸入錯誤,請重新輸入!\n");
    }
} while (input < 1 || input > 10); // 至少跑一次,錯誤則繼續
printf("您輸入的是: %d\n", input);

若改用 while,需在迴圈前額外寫一次 scanf,造成程式碼重複。

總結

while 是「防衛性」迴圈,適合不確定性場景;do-while 是「保證性」迴圈,適合必須先執行再驗證的場景。掌握「判斷時機」差異,即可靈活選用。

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