C言語入門|while と do-while の違い:前置判定と後置判定のしくみ

「while 文って、もう分かった気がするんだけど……
あれ? do-while って何が違うの?」

そんなふうに感じた人、実はとても多いです😊
見た目はよく似ている while と do-while ですが、
“条件をいつ判定するか” という点で、はっきりとした違いがあります。

この違いを理解すると、

  • ループが1回も実行されない理由
  • 必ず1回は処理したい場面
  • 無限ループを防ぐ考え方

が、スッと腑に落ちるようになります。

while 文の基本:前置判定の繰り返し

まずは、基本となる while 文から確認しましょう。

while 文の書式

while (条件式) {
    ブロック
}

while 文は、
ブロックを実行する前に条件式を評価 します。

この判定方法を 前置判定 と呼びます。

while 文の動き(考え方)

処理の流れを言葉で表すと、次のようになります。

  1. 条件式を評価する
  2. 条件が真ならブロックを実行
  3. 再び条件式を評価
  4. 条件が偽になったら終了

つまり、
最初の条件チェックで偽なら、1回も実行されません

サンプルプログラム(while 文)

プロジェクト名:5-5-1 ソースファイル名: sample5-5-1.c

#include <stdio.h>

int main(void)
{
    int count = 0;

    while (count > 0) {
        printf("カウント中です\n");
        count--;
    }

    printf("処理が終わりました\n");
    return 0;
}

このプログラムでは、
count の初期値が 0 なので、条件式 count > 0 は最初から偽です。

そのため、

  • ループ内の printf は一度も実行されない。
  • すぐに「処理が終わりました」が表示される。

という結果になります。

do-while 文の基本:後置判定の繰り返し

次に、do-while 文を見てみましょう。

do-while 文の書式

do {
    ブロック
} while (条件式);

while 文と違って、
最後にセミコロンが必要 な点に注意してください。

do-while 文の動き(考え方)

do-while 文は、
ブロックを実行したあとに条件式を評価 します。

この判定方法を 後置判定 と呼びます。

流れは次のとおりです。

  1. まずブロックを実行
  2. 条件式を評価
  3. 真ならブロックへ戻る
  4. 偽なら終了

つまり、
条件が偽であっても、必ず1回は実行される
というのが最大の特徴です。

サンプルプログラム(do-while 文)

プロジェクト名:5-5-2 ソースファイル名: sample5-5-2.c

#include <stdio.h>

int main(void)
{
    int count = 0;

    do {
        printf("最低1回は表示されます\n");
        count--;
    } while (count > 0);

    printf("処理が終わりました\n");
    return 0;
}

この場合も count の初期値は 0 ですが、

  • 先にブロックが実行される。
  • その後で条件式が評価される。

ため、「最低1回は表示されます」が必ず表示されます。

while と do-while の違いを整理しよう

ここで、両者の違いを表にまとめてみましょう。

項目while 文do-while 文
判定のタイミング実行前実行後
判定方式前置判定後置判定
最低実行回数0回1回
セミコロン不要必要

この表を見ると、
「どちらを使うべきか」の判断基準が見えてきますね😊

どんな場面で do-while を使うの?

do-while 文は、次のような場面で特に力を発揮します。

  • 入力を必ず1回は受け取りたい。
  • メニューを最低1回は表示したい。
  • 初期状態でも処理を実行したい。

たとえば、

  • ユーザー入力の再入力処理
  • ゲームの1ターン目
  • 初期メッセージ表示

などが、典型的な使いどころです。

「必ず1回」は、意図して使うのが大事

do-while 文は便利ですが、
「気づかないうちに1回実行されてしまった」
というバグの原因にもなりやすい構文です。

だからこそ、

  • なぜ do-while を使っているのか
  • 1回は必ず実行したい理由は何か

を、自分で説明できる状態で使うことが大切です😊