C言語のきほん|for文とwhile文の使い分け

同じループでも、伝わり方が変わる。forとwhileを“目的で選ぶ”だけでコードが読みやすくなる。

forとwhileは動きは同じ、でも「意図の見せ方」が違う

for文とwhile文は、見た目の書き方は違いますが、実はループの流れ自体は同じです。
どちらも基本はこの3点セットで動きます。

  • 初期設定(最初の準備)
  • 継続条件(続けるかの判定)
  • 再設定(次の周のための更新)

違いは何かというと、その3点セットをどこに書くか、そして 何を強調して読ませたいか なんですね。

  • forは「回数・範囲」を1行で見せやすい
  • whileは「条件が成り立つ間」をそのまま書きやすい

だから、動きは同じでも「読み手に伝わる意図」が変わります。ここを意識して選べるようになると、一段レベルアップです。

for文とwhile文の処理の流れは同じ

まずは共通点をはっきりさせます。
whileでもforでも、処理は次の順番で進みます。

つまり、ループの動作だけ見れば「どっちでもできる」んです。

同じ処理をwhileとforで書き比べる

以下は、3回だけメッセージを表示するプログラムです。
回数がはっきりしているので、forが得意そう…というのも分かりやすい題材です。

サンプルプログラム:while版

ファイル名:9_5_1.c

// whileで3回メッセージを表示するプログラム
#include <stdio.h>

int main(void)
{
    int count = 1;  // 初期設定(カウンタ変数の準備)

    while (count <= 3) {  // 継続条件(3回まで繰り返す)
        printf("こんにちは!%d回目の表示です。\n", count);
        count++;          // 再設定(次の回のために更新)
    }

    return 0;
}

サンプルプログラム:for版

ファイル名:9_5_2.c

// forで3回メッセージを表示するプログラム
#include <stdio.h>

int main(void)
{
    for (int count = 1; count <= 3; count++) {  // 初期設定・継続条件・再設定
        printf("こんにちは!%d回目の表示です。\n", count);
    }

    return 0;
}

どちらも出力は同じになります。
でも、for版は「3回だけやる」が1行で見えるので、読む側は理解が速いことが多いです。

書き方の違いを3点セットで対応させる

whileは3点セットが分散する

役割whileで書く場所
初期設定ループの前
継続条件whileの()
再設定ループの中

forは3点セットがまとまる

役割forで書く場所
初期設定forの1つ目
継続条件forの2つ目
再設定forの3つ目

この「まとまり」が、forの読みやすさにつながります。

一般的な使い分け:○回ならfor、~の間ならwhile

文書にあった定番の言い方を、もう少し噛み砕くとこうです。

  • for:回数や範囲が最初から決まっていて、カウンタで回す
  • while:終了条件が状況次第で、条件が成り立つ間だけ回す

使い分け早見表

目的おすすめ
1からNまで、0から9までなど範囲が明確for1〜100表示、配列を先頭から末尾まで
入力が正しくなるまで続けるwhile正しい値が入るまで再入力
0が入力されるまで続けるwhileセンチネル入力で終了
両方でも書けるが意図を明確にしたい目的で選ぶ読み手に優しいほう

どっちでも書けるけど、選ぶ基準は「読みやすさ」と「意図」

ここ、すごく大事です。
forとwhileはどちらでも書ける場合が多いので、最後は「読みやすいか」「意図が伝わるか」で決めるのが強いです。

例:回数が決まってるならforが自然

  • 3回表示
  • 10回繰り返す
  • 1からNまで合計

こういうのをwhileで書くと、初期化と更新が離れてしまい、読み手が探す情報が増えます。
逆にforなら、ループの形が1行で完結します。

例:終了条件が主役ならwhileが自然

  • 入力が0になるまで
  • ファイルの終わりまで
  • 条件が満たされるまで

こういうのをforで書くと、「forなのに回数が見えない」不自然さが出やすいです。
whileなら条件がそのまま書けて、意図が伝わります。

迷ったときの決め方(実戦的)

この判断ができれば、forとwhileの使い分けはかなり安定します。