名稱空間
變體
操作

do-while 迴圈

來自 cppreference.com
< c‎ | 語言

重複執行一個 語句,直到條件 表示式 的值為假。測試在每次迭代後進行。

目錄

[編輯] 語法

attr-spec-seq(可選) do 語句 while ( 表示式 ) ;
表示式 - 任何 標量型別表示式。此表示式在每次迭代後求值,如果它等於零,則退出迴圈。
語句 - 任何 語句,通常是複合語句,它是迴圈體
屬性說明序列 - (C23)可選的 屬性 列表,應用於迴圈語句

[編輯] 解釋

do-while 語句導致 語句(也稱為迴圈體)重複執行,直到 表示式(也稱為控制表示式)等於 0。無論迴圈體是正常進入還是透過 goto 跳入 語句 的中間,重複都會發生。

表示式 的求值發生在每次執行 語句 之後(無論是正常進入還是透過 goto)。如果需要在迴圈體之前求值控制表示式,可以使用 while 迴圈for 迴圈

如果迴圈的執行需要在某個點終止,可以使用 break 語句 作為終止語句。

如果迴圈的執行需要在迴圈體末尾繼續,可以使用 continue 語句 作為快捷方式。

如果一個程式有一個無限迴圈,並且迴圈的 語句表示式 的任何部分都沒有可觀察行為(I/O、volatile 訪問、原子或同步操作),則該程式的行為是未定義的。這允許編譯器最佳化掉所有不可觀察的迴圈,而無需證明它們會終止。唯一的例外是 表示式 是常量表達式的迴圈;do {...} while(true); 始終是一個無限迴圈。

與其他所有選擇和迭代語句一樣,do-while 語句建立 塊作用域:在 表示式 中引入的任何識別符號在語句之後都超出作用域。

(C99 起)

[編輯] 注意

布林和指標表示式經常用作迴圈控制表示式。布林值 false 和任何指標型別的空指標值都等於零。

[編輯] 關鍵字

do, while

[編輯] 示例

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    // trivial example
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // the loop body is a single expression statement
    while(n < SIZE);
    puts("Array filled!");
    n = 0;
    do { // the loop body is a compound statement
        printf("%d ", array[n]);
        ++n;
    } while (n < SIZE);
    printf("\n");
 
    // the loop from K&R itoa(). The do-while loop is used
    // because there is always at least one digit to generate
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // get next digit in reverse order
    while ((num /= 10) > 0);
    s[i] = '\0';
    puts(s);
}

可能的輸出

Array filled!
1 0 1 1 1 1 0 0
4321

[編輯] 參考

  • C17 標準 (ISO/IEC 9899:2018)
  • 6.8.5.2 do 語句 (p: 109)
  • C11 標準 (ISO/IEC 9899:2011)
  • 6.8.5.2 do 語句 (p: 151)
  • C99 標準 (ISO/IEC 9899:1999)
  • 6.8.5.2 do 語句 (p: 136)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 3.6.5.2 do 語句

[編輯] 另請參閱

C++ 文件 關於 do-while 迴圈