do-while 迴圈
來自 cppreference.com
重複執行一個 語句,直到條件 表示式 的值為假。測試在每次迭代後進行。
目錄 |
[編輯] 語法
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
和任何指標型別的空指標值都等於零。
[編輯] 關鍵字
[編輯] 示例
執行此程式碼
#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 迴圈 |