do-whileループ

forループの章では、whileループが実行される手順を確認した。

準備

条件チェック
実際の作業
反復

条件チェック
実際の作業
反復

...

do-whileループは、whileループと非常に似ている。違いは、do-whileループでは各反復の最後に条件チェックが行われるため、実際の処理が少なくとも1回実行される点だ。

準備

実際の作業
反復
状態確認    ← 反復の終了時

実際の作業
反復
状態確認    ← 反復の終了時

...

例えば、ユーザーが数字を推測する次のプログラムでは、数字を比較するためにユーザーは少なくとも1回は推測しなければならないため、do-whileの方がより自然だ。

import std.stdio;
import std.random;

void main() {
    int number = uniform(1, 101);

    writeln("I am thinking of a number between 1 and 100.");

    int guess;

    do {
        write("What is your guess? ");

        readf(" %s", &guess);

        if (number < guess) {
            write("My number is less than that. ");

        } else if (number > guess) {
            write("My number is greater than that. ");
        }

    } while (guess != number);

    writeln("Correct!");
}
D
do_while.1

プログラムで使用されている関数uniform()は、std.randomモジュールの一部だ。これは、指定された範囲の乱数を返す。上記のように使用すると、2番目の数は範囲外とみなされる。つまり、uniform()はその呼び出しに対して101を返さない。

演習

同じゲームをプレイするプログラムを作成し、プログラムが推測を行うようにする。プログラムが正しく書かれている場合、ユーザーの数値を最大7回の試行で推測できるはずだ。