C言語のきほん|whileとforの違い

whileは条件で回す、forは回数で回す。似ているようで使いどころがハッキリ違う、ループの選び方を身につけよう。

ループは書けるだけじゃなく「選べる」と強い

whileもforも、どちらも「同じ処理を繰り返す」ための道具です。
なので最初は「どっちを使っても同じじゃない?」って感じるかもしれません。

でも実際には、書きたい目的が違うことが多いんです。

  • 回数が決まっているなら、forの方が読みやすい
  • 終了条件が入力や状況次第なら、whileの方が自然

この違いが分かると、コードがスッキリして、他の人にも「意図が伝わる」ようになります。

for文の基本構文(whileとの違いが見える形)

for文の形はこうです。

for (初期設定式; 継続条件式; 再設定式) {
    文;
}

この1行に、ループの大事な要素が全部まとまっています。

部品役割実行タイミング
初期設定式カウンタ変数の準備ループ開始前に1回だけ
継続条件式続けるか判定ループのたびに毎回
再設定式カウンタ変数の更新ループ本体の最後

whileとforの本質的な違い(いちばん大事)

whileとforは、内部的には似た動きをします。
でも 「コードの見た目に表れる意図」 が違います。

違いを一言で

  • while:条件が真の間、繰り返す(条件主導)
  • for:決められた回数や範囲で、繰り返す(回数・範囲主導)

使い分けの目安

判断ポイントwhileが合うforが合う
回数が事前に分かる?分からない分かる
終了条件が入力や状況次第?そうちがう
カウンタ変数が中心?場合によるだいたい中心
読みやすさ条件の意味が自然に読める初期化・条件・更新がまとまりスッキリ

for文は「3点セット」を1行で見せるのが強み

whileでもループは書けますが、whileは3点セットが分散しがちです。

  • 初期化:ループの前
  • 条件:whileの()
  • 更新:ループの中

forはそれを、ここにまとめます。

初期化; 条件; 更新

つまりforは「見た瞬間にループの形が分かる」のが強みです。

whileで書いたものはforに変換できる(ほぼ同じ動作)

典型的なカウンタループは、whileとforで置き換えできます。

while版(一般形)

int i = 1;
while (i <= 5) {
    /* 処理 */
    i++;
}

for版(同じ意味)

for (int i = 1; i <= 5; i++) {
    /* 処理 */
}

動きはほぼ同じ。違うのは「意図の見せ方」です。

サンプルプログラム

例:合計を求める(1からNまで足す)

  • Nを入力
  • 1からNまでの合計を表示

これは回数がはっきり決まっているので、forが気持ちいい題材です。
同じ仕様をwhile版とfor版で並べてみます。

リスト:while版

ファイル名:9_3_1.c

// whileで1からNまでの合計を求めるプログラム
#include <stdio.h>

int main(void)
{
    int n;
    int i = 1;
    int sum = 0;

    printf("Nを入力してください(1以上)> ");
    scanf("%d", &n);

    while (i <= n) {
        sum += i;
        i++;
    }

    printf("1から%dまでの合計は%dです。\n", n, sum);

    return 0;
}

リスト:for版

ファイル名:9_3_2.c

// forで1からNまでの合計を求めるプログラム
#include <stdio.h>

int main(void)
{
    int n;
    int sum = 0;

    printf("Nを入力してください(1以上)> ");
    scanf("%d", &n);

    for (int i = 1; i <= n; i++) {
        sum += i;
    }

    printf("1から%dまでの合計は%dです。\n", n, sum);

    return 0;
}

どっちが読みやすい?

この例だと、for版は「iが1からnまで1ずつ増える」が1行で見えるので、読みやすいと感じる人が多いです。
while版も悪くないですが、iの初期化と更新が別の場所にあるので、目で追う範囲が少し増えます。

forのイメージを日本語で読む

for (int i = 1; i <= 5; i++)

これを日本語で読むと、こうです。

  • iを1にする(準備)
  • iが5以下の間は繰り返す(判定)
  • 1回終わるごとにiを1増やす(更新)

この3つが、forの丸括弧の中に全部入っています。

カウンタ変数の宣言位置の違い(地味に大事)

forでは、カウンタ変数をどこで宣言するかで、使える範囲が変わります。

forの中で宣言する(forの中だけで使う)

for (int i = 1; i <= 5; i++) {
    printf("%d\n", i);
}
// ここではiは使えない

先に宣言する(forの外でも使う)

int i;

for (i = 1; i <= 5; i++) {
    printf("%d\n", i);
}

printf("最後のiの値は%dです。\n", i);

「ループが終わったあとのiを使いたい」なら、こっちが自然です。

whileが本領発揮する場面(forより自然な例)

forは回数が見えるときに強いですが、whileは「いつ終わるか分からない」ときに強いです。

たとえば、

  • 0が入力されるまで繰り返し入力
  • 正しい値が入力されるまでやり直し
  • ファイルが終わるまで読み続ける

このタイプは、forで書こうとすると逆に不自然になりがちです。
whileだと条件がそのまま書けるので、読みやすくなります。

whileが自然な例(入力が終わるまで)

// 0が入力されるまで繰り返す例(whileが自然)
while (n != 0) {
    /* 入力と処理 */
}

この「nが0になるまで」という条件が、そのままwhileの()に置けるのが強いところです。