while循环

来自cppreference.com
< c‎ | language

重复执行statement,直到condition的值变得比较等于零。此测试在每次迭代前发生。

目录

[编辑] 语法

while ( expression ) statement
expression - 任何标量类型表达式。此表达式在每次迭代前求值,而且若它与零比较相等,则退出循环。
statement - 任何语句,典型的是一条复合语句,它作为循环体工作

[编辑] 解释

while导致statement(亦称为循环体)被重复执行,直至expression(亦称为控制表达式)与零比较相等。不管是正常进入循环体还是以goto进入statement中部,都会发生重复。

expression的求值在每次执行statement前发生(除非用goto进入)。若控制表达式需要在每次循环体后求值,可以用do-while循环

若循环的执行需要在某些点终止,则可将break语句用作终止语句。

若循环的执行需要从循环体的结尾继续,则可将continue语句用作快捷方式。

拥有无限循环的程序有未定义行为,若该循环在其statementexpression的任何部分无可观测行为(I/O、volatile访问、原子或同步操作)。这允许编译器优化掉整个不可观测循环,而无需证明他们会结束。仅有的例外是其expression是常量表达式的循环:while(true)始终是无限循环。

同所有选择和迭代语句,while语句建立块作用域:任何引入于expression的标识符在语句后离开作用域。

(C99起)

[编辑] 注意

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

[编辑] 关键词

while

[编辑] 示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum { SIZE = 8 };
int main(void)
{
    // 平凡样例
    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");
 
    // 经典的strcpy()实现
    // (从src到dst复制空终止字符串)
    char src[]="Hello, world", dst[sizeof src], *p=dst, *q=src;
    while(*p++ = *q++)
        ; // 空语句
    puts(dst);
}

输出:

Array filled!
1 0 1 1 1 1 0 0 
Hello, world

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 6.8.5.1 The while statement (p: 151)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.8.5.1 The while statement (p: 136)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.6.5.1 The while statement

[编辑] 参阅

while循环C++文档