do-while 循环
来自 cppreference.cn
重复执行一个 语句,直到条件 表达式 的值为假。测试在每次迭代后进行。
目录 |
[编辑] 语法
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 循环 |