C言語のきほん|while文

「条件が続く間だけ」くり返す。while文で、ループの基本をしっかり身につけよう。

同じ処理を何度もやりたいとき、ループが主役になる

プログラムを書いていると、「これを何回もやりたいな」という場面が本当にたくさん出てきます。
たとえば、

  • 入力が正しくなるまで何度も聞き直す
  • 合計や平均を出すために、同じ計算を繰り返す
  • 一覧を順番に表示する

こういう “くり返し” の仕組みを 繰り返し構造(ループ) と呼びます。

C言語には、繰り返し構造を作るための道具がいくつか用意されています。

制御文得意なことざっくりイメージ
while条件が真の間ずっと繰り返す条件チェック → 繰り返し
for回数や範囲が決まっている繰り返し初期化・条件・更新がまとまる
do~whileとにかく1回は実行したい1回実行 → 条件チェック
break途中で強制終了ループから脱出
continue今回だけスキップ次の周へ

この中でも while文 は、ループの基本中の基本です。まずはここを押さえると、後のforやdo~whileもスムーズに理解できます。

while文は「前判定」の繰り返し

while文の一番の特徴は、ループに入る前に条件をチェックすることです。
だから、

  • 条件が最初から偽なら、1回も実行されない

という動きになります。ここ、けっこう大事です。

ざっくり図で見るwhileの流れ

while文の基本構文

while文はこの形です。

while (継続条件式) {
    文;
}

構文の要点(表で整理)

要素意味ポイント
継続条件式真の間は繰り返す条件偽なら1回も実行されないことがある
繰り返し実行する処理複数行なら{}でブロックにする

文が1行でも、{}で囲むと読みやすくなるのでおすすめです。
特に学習中は「必ずブロックにする」くらいでちょうどいいです。

while文で大事な3点セット:初期化・条件・更新

while文を使うときは、だいたい次の3つがセットになります。

  1. 初期化:ループを始める前の準備
  2. 条件:続けるかどうかの判定
  3. 更新:次の繰り返しに進むための変化

この「更新」を忘れると、条件が永遠に真のままになって 無限ループ になりやすいです。
whileの最初の壁はここだったりします。

サンプルプログラム

例:所持金がある間、100円ずつ使って回数を数える

  • 所持金 money を入力
  • 100円使うたびに「あと何円」「何回使った」を表示
  • 所持金が100円未満になったら終了

whileの「条件が真の間くり返す」が分かりやすい題材です。

ファイル名:9_1_1.c

// while文で「所持金がある間だけ」100円ずつ使う回数を数えるプログラム
#include <stdio.h>

int main(void)
{
    int money;
    int count = 0;

    printf("所持金を入力してください(円)> ");
    scanf("%d", &money);

    // 100円以上ある間だけ、100円ずつ使い続ける
    while (money >= 100) {
        money -= 100;   // 100円使う
        count++;        // 使った回数を増やす
        printf("%d回使いました。残りは%d円です。\n", count, money);
    }

    printf("もう100円は使えません。\n");

    return 0;
}

実行イメージ

所持金を入力してください(円)> 350
1回使いました。残りは250円です。
2回使いました。残りは150円です。
3回使いました。残りは50円です。
もう100円は使えません。

この例は、whileの3点セットが全部入っています。

  • 初期化:count = 0(回数を0にする)
  • 条件:money >= 100(100円以上なら続ける)
  • 更新:money -= 100 と count++(状態が変化する)

while文の流れをもう少し丁寧に追ってみよう

さっきのプログラムを、頭の中で追いやすいように分解してみます。

1) 初期化

  • count を 0 にする
  • money は入力で決まる

2) 継続条件式を判定

  • money >= 100 が真ならループに入る
  • 偽ならループに入らず、そのまま次へ

3) ループ本体(繰り返し処理)

  • money を 100 減らす
  • count を 1 増やす
  • 状況を表示する

4) 条件判定に戻る

  • again:money >= 100 をチェック
  • 偽になったら終了

流れ図っぽくするとこう

「1回も実行されない」ケースをわざと考える

whileは前判定なので、入力がこうだとどうなるでしょう?

  • money = 50

条件 money >= 100 は最初から偽です。
つまり、ループ本体は一度も実行されません。

実行イメージ

所持金を入力してください(円)> 50
もう100円は使えません。

ここで「え、何も表示されないの?」ってならないように、ループの外側に終了メッセージを置くのはよくある書き方です。

ループで使う変数の呼び方(カウンタ変数など)

whileの中で回数を数える変数は、よくこう呼ばれます。

呼び方意味
カウンタ変数回数を数えるcount, i
ループ変数ループ全般で使うi, j, k
インデックス変数配列の要素番号を指すi, index

i は index の略として慣例的によく使われます。
ただ、今回みたいに「回数を数える」なら count のほうが意味が伝わって親切です。

while文を書くときのコツ(読みやすさと事故防止)

インデントは必ず付ける

動く・動かない以前に、ループは見た目が命です。
字下げがないコードは、読む側がとても疲れます。

1行でもブロックにする癖を付ける

後から行が増えたときに、事故を防げます。

更新が本当に起きているか確認する

無限ループを避けるために、次をチェックすると安心です。

  • 条件で使っている変数が、ループ内でちゃんと変化しているか
  • いつか条件が偽になる道筋があるか

こういう観点でwhile文を見られるようになると、ループの理解が一気に安定します。