do 文

do文は、特殊なケースで使われることもありますがwhile文やfor文に比べ、使用頻度は極めて低い文です。while文では式を最初に評価し、結果が0以外であれば文を実行するという処理を繰り返すものでした。よって、最初から式の結果が0になるような条件であった場合、繰り返し対象の文は一度も実行されないまま、次の処理に進みます。

do文は、式の評価と文の実行がwhile文とは逆の繰り返し文です。do文では、最初に繰り返し対象の文を実行し、その後、文を繰り返すかどうかを判断するための制御式を評価します。条件に関わらず、必ず1度は文を実行しなければならない場合に使えます。

do 文 while ( 式 );

do文はdoキーワードから始まり、続いて繰り返し対象の文を指定します。文の次にはwhileキーワードと制御式を指定するための括弧 ( ) が続きます。whileキーワードが使われていますが、ここで使われているwhileキーワードはwhile文と構文上の関係はありません。do文において、doキーワードとwhileキーワードはセットなので、しばしばdo-while文と呼ぶこともあります。

do文は、最初に文を実行し、その後に式を評価します。よって、式が結果が最初から0であっても、必ず1度は文が実行されることになります。

サンプル04

#include <stdio.h>

int main(void)
{
    int i = 10;

    do {
        printf("i = %d\n", i);
        i++;
    } while (i < 10);

    return 0;
}

実行結果

サンプル04は、整数型の変数 i が10より小さければ繰り返すdo文を作成しています。しかし、i 変数を10で初期化しているため、最初から繰り返しの条件が満たされておらず、do文の制御式の結果は0になります。while文であれば、繰り返し対象の文が実行されないまま次の処理に向かいますが、do文は最初から条件が満たされていなくても、1回は必ず文を実行します。実行結果から、do文による繰り返し処理の対象となっているprintf()関数が実行されていることが確認できます。