while 迴圈
來自 cppreference.com
重複執行 statement,直到 expression 的值等於零。測試在每次迭代之前進行。
目錄 |
[編輯] 語法
attr-spec-seq(可選) while ( expression ) statement |
|||||||||
表示式 | - | 任何標量型別的表示式。此表示式在每次迭代之前進行求值,如果其結果等於零,則迴圈退出。 |
語句 | - | 任何語句,通常是複合語句,用作迴圈體 |
屬性說明序列 | - | (C23)可選的屬性列表,應用於迴圈語句 |
[編輯] 解釋
while
語句會重複執行 statement(也稱為迴圈體),直到 expression(也稱為控制表示式)的比較結果等於零。無論迴圈體是正常進入還是透過 goto 跳轉到 statement 中間,都會發生重複執行。
在每次執行 statement 之前(除非透過 goto 進入),都會對 expression 進行求值。如果需要在迴圈體之後對控制表示式進行求值,可以使用 do-while 迴圈。
如果需要在某個點終止迴圈的執行,可以使用 break 語句作為終止語句。
如果需要在迴圈體末尾繼續迴圈的執行,可以使用 continue 語句作為快捷方式。
如果迴圈的任何部分(statement 或 expression)都沒有可觀察的行為(I/O、volatile 訪問、原子或同步操作),則包含無限迴圈的程式具有未定義行為。這允許編譯器最佳化掉所有不可觀察的迴圈,而無需證明它們會終止。唯一的例外是 expression 是常量表達式的迴圈;while(true)
始終是無限迴圈。
與所有其他選擇和迭代語句一樣,while 語句建立塊作用域:在 expression 中引入的任何識別符號在 statement 之後都超出作用域。 |
(C99 起) |
[編輯] 註釋
布林表示式和指標表示式經常用作迴圈控制表示式。布林值 false
和任何指標型別的空指標值都等於零。
[編輯] 關鍵字
[編輯] 示例
執行此程式碼
#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SIZE = 8 }; int main(void) { // trivial example int array[SIZE], n = 0; while(n < SIZE) array[n++] = rand() % 2; puts("Array filled!"); n = 0; while(n < SIZE) printf("%d ", array[n++]); printf("\n"); // classic strcpy() implementation // (copies a null-terminated string from src to dst) char src[] = "Hello, world", dst[sizeof src], *p = dst, *q = src; while((*p++ = *q++)) // double parentheses (that are not strictly necessary) // used to suppress warnings, ensuring that this is an // assignment (as opposed to a comparison) by intention, // whose result is used as a truth value ; // null statement puts(dst); }
輸出
Array filled! 1 0 1 1 1 1 0 0 Hello, world
[編輯] 參考文獻
- C17 標準 (ISO/IEC 9899:2018)
- 6.8.5.1 while 語句 (p: 109)
- C11 標準 (ISO/IEC 9899:2011)
- 6.8.5.1 while 語句 (p: 151)
- C99 標準 (ISO/IEC 9899:1999)
- 6.8.5.1 while 語句 (p: 136)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 3.6.5.1 while 語句
[編輯] 另請參見
C++ 文件,關於
while 迴圈 |