
C言語の基本|回数ならfor、条件ならwhile
回数が見えるならfor、終わる条件が主役ならwhile。ループの目的に合わせて、意図が伝わる書き方を選ぼう。
for文とwhile文は、どちらも同じ処理を繰り返すための制御文です。書き方は異なりますが、ループを動かす基本的な仕組みは共通しています。
どちらのループにも、次の3つの要素があります。
- 初期設定:繰り返しを始める前の準備
- 継続条件:処理を続けるかどうかの判定
- 再設定:次の繰り返しに向けた変数の更新
同じ繰り返し処理をfor文でもwhile文でも書ける場合はたくさんあります。違いは、処理が実行できるかどうかではなく、プログラムを読んだ人に何を強調して伝えるかです。
for文は、回数や数値の範囲を使った繰り返しを分かりやすく表現できます。while文は、条件が成り立っている間だけ続ける処理を自然に表現できます。
図1:for文とwhile文に共通するループの流れ

この図から分かること
for文とwhile文は、基本的に同じ順番で処理を進めます。
最初に初期設定を行い、継続条件を確認します。条件が真ならループ本体を実行し、再設定によって変数を更新してから条件判定へ戻ります。
継続条件が偽になるとループを終了します。この基本的な流れは、for文でもwhile文でも変わりません。
for文とwhile文の処理順序
for文とwhile文は、どちらも次の順番で動きます。
- 初期設定を行う
- 継続条件を評価する
- 条件が真ならループ本体を実行する
- 再設定で変数を更新する
- 継続条件の評価へ戻る
- 条件が偽になったらループを終了する
この処理順序をwhile文で表すと、次の形になります。
初期設定;
while (継続条件) {
繰り返す処理;
再設定;
}同じ流れをfor文で表すと、次の形になります。
for (初期設定; 継続条件; 再設定) {
繰り返す処理;
}処理の流れは同じですが、3つの要素を書く場所が異なります。
while文では3つの要素を別々に書く
while文では、初期設定、継続条件、再設定をそれぞれ別の場所に記述します。
int count = 1;
while (count <= 4) {
printf("%d回目\n", count);
count++;
}| 要素 | while文で書く場所 | この例での記述 |
|---|---|---|
| 初期設定 | while文の前 | count = 1 |
| 継続条件 | whileの丸括弧内 | count <= 4 |
| 再設定 | ループ本体の中 | count++ |
while文では、継続条件が目立つ位置にあります。そのため、いつ終わるかが状況によって変わるループを表現しやすくなります。
一方で、初期設定と再設定が離れているため、回数を管理するループでは3つの要素を探して読む必要があります。
for文では3つの要素を1行にまとめる
for文では、初期設定、継続条件、再設定を丸括弧内へまとめて記述します。
for (int count = 1; count <= 4; count++) {
printf("%d回目\n", count);
}| 要素 | for文で書く場所 | この例での記述 |
|---|---|---|
| 初期設定 | 丸括弧内の1つ目 | int count = 1 |
| 継続条件 | 丸括弧内の2つ目 | count <= 4 |
| 再設定 | 丸括弧内の3つ目 | count++ |
for文の1行を見るだけで、次の情報を確認できます。
- countは1から始まる
- countが4以下の間は繰り返す
- 1回ごとにcountを1増やす
このまとまりが、回数や範囲が決まっている繰り返しでfor文が読みやすい理由です。
while文で信号機を4台確認する
次のプログラムでは、while文を使って4台の信号機を順番に確認します。
while文で4台の信号機を順番に確認するプログラム
ファイル名:9_5_1.c
#include <stdio.h>
int main(void)
{
int count = 1;
while (count <= 4) {
printf("%d台目の信号機を確認します。\n", count);
count++;
}
return 0;
}実行結果の例
1台目の信号機を確認します。
2台目の信号機を確認します。
3台目の信号機を確認します。
4台目の信号機を確認します。プログラムの詳しい解説
最初に、カウンタ変数countを1で初期化しています。
int count = 1;この部分がループの初期設定です。最初に確認する信号機を1台目とするため、開始値を1にしています。
while文の継続条件はcount <= 4です。
while (count <= 4)countが4以下である間、ループ本体を繰り返します。
ループ本体では、現在のcountを信号機の番号として表示します。
printf("%d台目の信号機を確認します。\n", count);表示後はcount++によってcountを1増やします。
count++;各繰り返しでの値は、次のように変化します。
| 条件判定の時点 | count <= 4 | 表示内容 | 再設定後のcount |
|---|---|---|---|
| count = 1 | 真 | 1台目 | 2 |
| count = 2 | 真 | 2台目 | 3 |
| count = 3 | 真 | 3台目 | 4 |
| count = 4 | 真 | 4台目 | 5 |
| count = 5 | 偽 | 表示しない | 変更なし |
countが5になるとcount <= 4が偽になるため、while文を終了します。
for文で信号機を4台確認する
同じ処理をfor文で記述すると、初期設定、継続条件、再設定を1行にまとめられます。
for文で4台の信号機を順番に確認するプログラム
ファイル名:9_5_2.c
#include <stdio.h>
int main(void)
{
int count;
for (count = 1; count <= 4; count++) {
printf("%d台目の信号機を確認します。\n", count);
}
return 0;
}実行結果の例
1台目の信号機を確認します。
2台目の信号機を確認します。
3台目の信号機を確認します。
4台目の信号機を確認します。プログラムの詳しい解説
for文の丸括弧内は、セミコロンによって3つの部分に分かれています。
for (count = 1; count <= 4; count++)それぞれの役割は次のとおりです。
count = 1最初の部分は初期設定です。ループを始めるときに一度だけ実行されます。
count <= 42つ目は継続条件です。ループ本体へ入る前に評価され、真なら処理を続けます。
count++3つ目は再設定です。ループ本体を1回実行するたびにcountを1増やします。
for文では、countの開始値、終了条件、変化のしかたが同じ行に並んでいます。そのため、4回繰り返すループであることを把握しやすくなっています。
図2:while文とfor文で3要素を書く場所の違い

この図から分かること
while文では、初期設定、継続条件、再設定が別々の場所に書かれています。継続条件が中心に見えるため、条件によって終了するループに向いています。
for文では3つの要素が1行にまとまっています。どこから始まり、いつまで続き、どのように変化するのかをまとめて確認できます。
同じ出力でも伝わる意図が違う
9_5_1.cと9_5_2.cは、どちらも同じ結果を表示します。
| 比較する点 | while版 | for版 |
|---|---|---|
| 開始値 | count = 1 | count = 1 |
| 継続条件 | count <= 4 | count <= 4 |
| 再設定 | count++ | count++ |
| ループ回数 | 4回 | 4回 |
| 実行結果 | 同じ | 同じ |
実行結果だけを見ると違いはありません。
ただし、for文を見た読み手は、回数を管理するカウンタループだとすぐに判断できます。while文では、条件が中心となるループであることが強調されます。
どちらを使っても正しく動く場合は、処理の目的が伝わりやすいほうを選びましょう。
回数や範囲が決まっているならfor文
繰り返す回数や数値の範囲が、ループを始める時点で分かっている場合はfor文が向いています。
たとえば、次のような処理です。
- 同じメッセージを5回表示する
- 1から100までの整数を順番に処理する
- 配列の先頭から末尾まで確認する
- 10個のセンサー値を合計する
- 0から9までの番号を表示する
for文では、ループの範囲を1行にまとめて示せます。
for (count = 1; count <= 5; count++) {
繰り返す処理;
}この1行から、1から5まで1ずつ増やすことが読み取れます。
終了条件が状況によって決まるならwhile文
何回繰り返すかを事前に決められず、実行中の状態によって終了する場合はwhile文が向いています。
たとえば、次のような処理です。
- 0が入力されるまで入力を続ける
- 正しい値が入力されるまで再入力する
- 荷物が残っている間、搬送を続ける
- センサーが異常を示している間、確認を続ける
- ファイルの終わりまでデータを読み込む
while文では、終了を判断する条件が目立ちます。
while (input != 0) {
繰り返す処理;
}このコードからは、inputが0ではない間、繰り返すという意図がすぐに分かります。
for文でも条件中心のループは書ける
for文の3つの式は、それぞれ省略できます。そのため、条件だけを残した書き方も可能です。
for (; input != 0; ) {
繰り返す処理;
}この書き方はwhile文と同じように動かせますが、初期設定と再設定がないfor文は少し不自然に見えることがあります。
終了条件が主役なら、次のwhile文のほうが目的を伝えやすいでしょう。
while (input != 0) {
繰り返す処理;
}書けるかどうかだけではなく、コードを見たときに意図をすぐ理解できるかが大切です。
while文でも回数指定のループは書ける
回数が決まっている処理をwhile文で書くこともできます。
count = 1;
while (count <= 5) {
繰り返す処理;
count++;
}正しく動作しますが、初期設定と再設定が離れています。
再設定のcount++を書き忘れると、countが変化せず、ループが終了しません。for文なら、count++がループの見出し部分にあるため、カウンタの更新を確認しやすくなります。
for文とwhile文の使い分け早見表
| 目的や状況 | おすすめ | 理由 |
|---|---|---|
| 決まった回数だけ繰り返す | for | 回数を1行で確認できる |
| 1からNまで処理する | for | 開始値と終了条件が明確 |
| 配列を順番に処理する | for | インデックスの変化をまとめて書ける |
| 0が入力されるまで続ける | while | 終了条件をそのまま表現できる |
| 正しい入力まで繰り返す | while | 回数を事前に決められない |
| 状態が変わるまで待つ | while | 状態条件がループの中心になる |
| どちらでも自然に書ける | 読みやすいほう | 意図が伝わることを優先する |
選択するときはループの主役を考える
for文とwhile文のどちらを使うか迷ったら、ループで何を一番見せたいかを考えてみましょう。
回数や範囲が主役なら、次の情報を1行で見せられるfor文が向いています。
- どこから始めるか
- どこまで続けるか
- 1回ごとにどう変化するか
終了条件が主役なら、while文が向いています。
- 入力が特定の値になるまで
- データが残っている間
- 条件を満たすまで
- 状態が変化するまで
図3:for文とwhile文を選ぶ判断の流れ

この図から分かること
回数や範囲が最初から分かっている場合は、for文を選ぶとループの全体像を1行で表せます。
回数が分からず、入力値や状態の変化によって終了する場合は、while文を選ぶと継続条件が分かりやすくなります。
迷ったときの決め方
for文とwhile文で迷ったときは、次の順番で考えると選びやすくなります。
- 繰り返す回数が最初から決まっているか確認する
- 開始値と終了値をカウンタで表せるか確認する
- 回数や範囲が明確ならfor文を選ぶ
- 終了が入力値や状態に左右されるならwhile文を選ぶ
- どちらでも自然に書けるなら、処理の意図が読み取りやすいほうを選ぶ
for文とwhile文は、どちらか一方だけが正しいという関係ではありません。同じ処理を実現できる場合でも、ループの目的に合った構文を選ぶことで、後からコードを読む人が処理を理解しやすくなります。
