首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

do-while loop

重复执行一个语句,直到条件的值变为 false。测试发生在每次迭代之后。

句法

do statement while ( expression ) ;

表达

-

标量类型的任何表达式。这个表达式在每次迭代之后被评估,并且如果它比较等于零,则退出循环。

声明

-

任何语句,通常是复合语句,它是循环的主体

说明

do-while语句会导致语句(也称为循环体)被重复执行,直到表达式(也称为控制表达式)的比较值等于0.无论循环体是正常输入还是跳转到中间,都会重复执行。声明。

表达式的评估发生在每次执行语句后(无论是正常输入还是通过 goto)。如果需要在循环体之前评估控制表达式,则可以使用 while 循环或 for 循环。

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

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

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

与所有其他选择和迭代语句一样,do-while 语句会建立块范围:表达式中引入的任何标识符在语句后超出范围。

(自C99以来)

笔记

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

关键词

do, while.

代码语言:javascript
复制
#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);
}

可能的输出:

代码语言:javascript
复制
Array filled!
1 0 1 1 1 1 0 0
4321

参考

  • C11 standard (ISO/IEC 9899:2011):
    • 6.8.5.2 The do statement (p: 151)
  • C99 standard (ISO/IEC 9899:1999):
    • 6.8.5.2 The do statement (p: 136)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • 3.6.5.2 The do statement

扫码关注腾讯云开发者

领取腾讯云代金券