
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の()に置けるのが強いところです。
