第3.8章: do while

English

do while 语句

do while 循环与 while 循环相似,区别在于 循环体在检查条件之前至少执行一次。


do {
    body
} while (cond);

条件在循环体执行之后检查。

基础示例

这个循环打印 0 到 4。


::std::uint_least32_t i{};

do {
    println("i=", i);
    ++i;
} while (i != 5);

与 while 的区别

如果开始时条件为假,while 循环可能一次都不执行。


::std::uint_least32_t i{5};

while (i != 5) {   // false immediately
    println("never printed");
}

但 do while 总会执行一次循环体:


::std::uint_least32_t i{5};

do {
    println("printed once");
} while (i != 5);

求和示例

这个例子对 [0, 100) 求和。


::std::uint_least32_t i{};
::std::uint_least32_t sum{};

do {
    sum = sum + i;
    ++i;
} while (i != 100);

println("sum of [0,100) = ", sum);

输入校验示例

do while 的一个经典用法是反复执行,直到收到合法输入。


::std::int_least32_t x{};

do {
    print("Enter a number between 1 and 5: ");
    scan(x);
} while (x < 1 || x > 5);

println("You entered: ", x);

提示语总会至少出现一次。

空循环体的 do while

空循环体是允许的,尽管很少需要。


do {
    ;
} while (false);

伪图:do while


          ┌───────────────┐
          │     body       │   (runs once)
          └───────┬───────┘
                  │
                  ▼
          ┌───────────────┐
          │     cond       │─── false ───▶ loop ends
          └───────┬───────┘
                  │ true
                  ▼
                  └─────────────── back to body
      

要点