コース一覧
    C言語基礎 制御フロー編
    do-while

    C言語基礎 制御フロー編

    C言語の条件分岐と繰り返しを学び、処理の流れを組み立てるコースです。

    1
    条件分岐
    01. if文15分
    02. else ifで多分岐15分
    03. switch文15分
    04. 三項演算子15分
    05. 定番 FizzBuzz判定15分
    06. 条件の組み合わせ15分
    07. つくる 合否とランク判定15分
    08. 第3章クイズ10分
    2
    繰り返し
    01. for文15分
    02. while15分
    03. do-while15分
    04. breakとcontinue15分
    05. 二重ループ(九九)15分
    06. FizzBuzzループ版15分
    07. つくる N人分の入力15分
    08. 第4章クイズ10分

    do-while

    先に1回やってから考える

    前回の while は、中身に入る前に条件を確かめました。だから条件が最初から偽なら 1 回も動きません。ところが世の中には「とりあえず 1 回はやってみて、その結果を見てから続けるか決めたい」処理があります。メニューの表示と入力がその代表です。

    メニューを出す前に「もう一度出すべきか」を判断することはできません。まだ何も選ばれていないからです。こういうときに使うのが do-while です。

    c

    do {
        繰り返したい処理
    } while (条件);

    中身を先に 1 回実行し、そのあとで条件を確かめます。真ならもう一度中身に戻り、偽ならそこで終わります。つまり 中身は最低 1 回は必ず動く のが while との唯一にして最大の違いです。

    末尾のセミコロンを忘れない

    } while (条件); の最後にはセミコロンが要ります。while 単体のときは while (条件) { } で、閉じ波カッコのうしろにセミコロンを書きません。do-while だけは文全体がここで終わるので、セミコロンで締めます。これを忘れると、次の行が while の中身と解釈されて、原因の分かりにくいコンパイルエラーになります。

    入力のやり直しに向いている

    c

    int choice;
    
    do {
        printf("番号を選んでください\n");
        scanf("%d", &choice);
    } while (choice < 1 || choice > 3);

    この形は、正しい値が来るまで聞き直す定番です。条件の書き方に注意してください。while の条件は 繰り返しを続ける条件 なので、ここに書くのは「正しい値」ではなく「やり直したい値」です。1 から 3 が正解なら、続ける条件はその否定である choice < 1 || choice > 3 になります。第3章で学んだ論理演算子がここで効いてきます。

    また、while のときは scanf を 2 か所に書く必要がありましたが、do-while なら中身の中に 1 回書くだけで済みます。読んでから判定する、という順番が言語の形とそのまま一致するからです。

    どちらを使うか

    迷ったら、中身を 0 回で終わらせたいことがあるか で決めます。0 件の入力もありうるなら while、必ず 1 回は見せたいメニューや、少なくとも 1 回は聞きたい入力なら do-while です。

    実際のところ、C のコードで do-while が出てくる場面は while や for より少なめです。それでも覚えておく価値があるのは、入力のやり直しという頻出の形に、これがぴったり当てはまるからです。while で同じことをしようとすると、ループの前に 1 回目の表示と入力を書き、ループの中にもう一度同じ表示と入力を書くことになります。前回の番兵の例で scanf が 2 か所に必要だったのと同じ事情です。同じコードが 2 か所にあると、片方だけ直して食い違う、という事故が起きます。do-while はその重複をまるごと消してくれます。

    もうひとつ、繰り返しの回数を数えたいなら do-while は向きません。最低 1 回動くという性質が、0 件のときの結果を狂わせるからです。件数を数える処理は while か for に任せてください。

    では、成績管理CLI のメニューを、正しい番号が選ばれるまで出し続けてみましょう。

    要件

    1. メニューは「1 点数を入力」「2 平均を見る」「3 終了」の3行と、「番号を選んでください」の1行
    2. 1 から 3 以外が入力されたら、メニューをもう一度最初から表示する
    3. 正しい番号が来たら「2番が選ばれました」の形で表示して終わる
    4. do-while を使い、メニューは必ず1回は表示されるようにする

    ヒント

    while に書くのは繰り返しを続ける条件なので、正しい値ではなくやり直したい値を書きます

    } while (...) の最後にセミコロンが要ります

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • breakとcontinue

      ループの途中で抜けたり飛ばしたりできるようになります。

    • 二重ループ(九九)

      ループの入れ子を書けるようになります。

    • FizzBuzzループ版

      判定と繰り返しを組み合わせられるようになります。

    • つくる N人分の入力

      人数を聞いて、その人数ぶんの処理を回せるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 処理計算や代入を表す長方形
    • 判断YES/NO 分岐を表す菱形
    • do-while最低1回は実行されるループ
    • コンパイルソースをバイトコードへ変換する処理
    • 論理演算子and=両方True、or=どちらかTrue、not=反転。
    • 演算子//は切り捨て除算(7 // 2 = 3)。
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    main.c
    エディタを読み込んでいます

    メモ

    do-while

    ⌘S で保存