命名空间
变体
操作

while 循环

来自 cppreference.com
< c‎ | 语言

重复执行 statement,直到 expression 的值等于零。测试在每次迭代之前进行。

内容

[编辑] 语法

attr-spec-seq(optional) while ( expression ) statement
expression - 任何 表达式标量类型。此表达式在每次迭代之前进行评估,如果它与零相等,则退出循环。
statement - 任何 语句,通常是复合语句,用作循环的主体
attr-spec-seq - (C23)可选的 属性 列表,应用于循环语句

[编辑] 解释

while 语句导致 statement(也称为循环体)重复执行,直到 expression(也称为控制表达式)与零相等。无论循环体是正常进入还是通过 goto 进入 statement 的中间,都会发生重复。

expression 的评估在每次执行 statement 之前进行(除非通过 goto 进入)。如果控制表达式需要在循环体之后进行评估,则可以使用 do-while 循环

如果需要在某个时刻终止循环的执行,则可以使用 break 语句 作为终止语句。

如果需要在循环体末尾继续执行循环,则可以使用 continue 语句 作为快捷方式。

具有无限循环的程序如果循环在其 statementexpression 的任何部分中没有可观察的行为(I/O、易失性访问、原子或同步操作),则具有未定义的行为。这允许编译器优化掉所有不可观察的循环,而无需证明它们会终止。唯一的例外是 expression 是一个常量表达式的循环;while(true) 始终是一个无限循环。

与所有其他选择和迭代语句一样,while 语句建立 块作用域:在 expression 中引入的任何标识符在 statement 之后超出作用域。

(自 C99 起)

[编辑] 备注

布尔值和指针表达式通常用作循环控制表达式。布尔值 false 和任何指针类型的空指针值与零相等。

[编辑] 关键字

while

[编辑] 示例

#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++ 文档 for while 循环