コース一覧
    C言語基礎 制御フロー編
    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分

    while

    回数が決まっていない繰り返し

    前回の for は「5 回」「40 回」のように回数が先に決まっているときの道具でした。ところが成績管理では、何件入力されるか実行するまで分からない、という場面のほうが多くなります。こういうときに使うのが while です。

    c

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

    読み方はそのまま「条件が真であるあいだ、中身を繰り返す」です。for の丸カッコから初期化と更新を取り除き、条件だけを残した形だと考えると分かりやすくなります。

    終わらせ方は自分で用意する

    for は i++ が自動で条件に近づけてくれましたが、while にはそれがありません。中身のどこかで条件を偽に近づける処理を 自分で書かないと、永久に止まりません。これが無限ループです。

    c

    int score;
    int total = 0;
    
    scanf("%d", &score);
    while (score >= 0) {
        total += score;
        scanf("%d", &score);
    }

    この形は「番兵」と呼ばれる定番です。負の数が来たら終わり、という合図の値をあらかじめ決めておき、それが来るまで読み続けます。点数は 0 以上しかありえないので、負の数を終了の合図に使えます。

    注目してほしいのは scanf が 2 か所 にあることです。ループに入る前に 1 件目を読んでおき、中身の最後で次の 1 件を読みます。こうしないと、条件を確かめる時点で score にまだ何も入っていない、という状態になります。初期化していない変数の中身は決まっていないので、そのまま条件に使うと結果が予測できません。

    1回も回らないことがある

    while も for と同じく、条件を確かめるのは中身の 前 です。1 件目にいきなり負の数が来たら、中身は 1 回も実行されません。件数が 0 件でも合計が 0 と正しく出るように、total や count はループの前に 0 で初期化しておきます。

    無限ループを作ってしまったときは、total += score; は書いたのに 2 つ目の scanf を忘れた、というのが定番の原因です。条件に出てくる変数が、中身のどこで変わるのかを指で追って確かめてください。

    for と while は書き換えられる

    じつは for で書けるものは while でも書けます。for (i = 1; i <= 5; i++) は、int i = 1; をループの前に出し、while (i <= 5) と書き、中身の最後に i++; を置けば、まったく同じ動きになります。逆に while で書いたものを for に直すこともできます。

    どちらを使うかは、動きの違いではなく 何が主役か で決めます。回数が主役なら for、条件が主役なら while です。初期化と更新が丸カッコの中にまとまっている for は、回数を数える意図がひと目で伝わります。一方 while は、終わる条件だけを目立たせたいときに読みやすくなります。同じ動きをする書き方が複数あるとき、意図がいちばん伝わるものを選ぶ、というのはこの先ずっと付いてくる判断です。

    では、負の点数が来るまで点数を読み続けて、件数と合計を出してみましょう。

    要件

    1. 点数を読むたびに「1件目 80点」の形で表示する
    2. 負の数が来たら読み込みをやめ、「入力終了」と表示する
    3. 最後に「3件の合計は240点です」の形で件数と合計を表示する
    4. 1件も入力されなかった場合も 0件 0点 と正しく表示する

    ヒント

    ループに入る前に1件目を読み、中身の最後で次の1件を読みます

    件数の変数と合計の変数は、ループの前に 0 で初期化しておきます

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

    関連レッスン

    • do-while

      最低1回は必ず動く繰り返しを書けるようになります。

    • breakとcontinue

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

    • 二重ループ(九九)

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

    • FizzBuzzループ版

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

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

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

    • 処理計算や代入を表す長方形
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 変数データに名前をつけて参照する仕組み
    • 判断YES/NO 分岐を表す菱形
    main.c
    エディタを読み込んでいます

    メモ

    while

    ⌘S で保存