
C++入門|while文による繰り返し処理
while文は、条件が成り立つ間だけ修行を続ける繰り返しの基本技。終了条件を見極めながら処理を進めれば、C言語のループ処理がぐっと分かりやすくなります。
C言語では、同じ処理を何度も実行したいときに、繰り返し処理を使います。
前に学んだfor文は、開始値、条件、増分処理を1行にまとめて書ける便利な繰り返し処理でした。
一方で、C言語にはもうひとつよく使われる繰り返し処理があります。
それが while文 です。
while文は、条件が成り立っている間、同じ処理を繰り返します。
ドラゴンボール風にたとえるなら、while文は「修行条件を満たしている間だけ続く特訓」です。
たとえば、修行回数が5回以下の間は技を出し続ける、体力が残っている間は修行を続ける、敵の戦闘力が一定以上なら警戒を続ける、というように、条件を確認しながら処理を進めるときに使います。
for文が「1回目から5回目まで修行する」といった回数管理に強い書き方だとすれば、while文は「条件が成り立つ間は修行を続ける」という考え方が見えやすい書き方です。
| 繰り返し処理 | 特徴 | ドラゴンボール風のイメージ |
|---|---|---|
| for文 | 初期化、条件、増分を1行にまとめやすい | 修行回数を最初から決めて進める |
| while文 | 条件が成り立つ間、処理を繰り返す | 条件を確認しながら修行を続ける |
while文は、C言語でもC++でもよく使う大切な基本文法です。
ここでは、while文の書き方、動く順番、for文との違い、注意点まで、ゆっくり整理していきましょう。
while文を使ったプログラム
まずは、while文を使ったサンプルプログラムを見てみましょう。
今回は、修行回数を1回目から5回目まで表示するプログラムにします。
変数roundを使って、現在の修行回数を数えながら、while文で繰り返します。
プロジェクト/ファイル名: Chap1_05/main.c
#include <stdio.h>
int main(int argc, char** argv) {
// 修行回数を表す変数を1で初期化する
int round = 1;
// roundが5以下の間、修行回数を表示する
while (round <= 5) {
printf("%d回目の修行\n", round);
// 次の修行回数へ進める
round++;
}
// プログラムが正常に終わったことを示す
return 0;
}このプログラムを実行すると、次のように表示されます。
1回目の修行
2回目の修行
3回目の修行
4回目の修行
5回目の修行このプログラムでは、roundという変数を使って修行回数を数えています。
最初にroundへ1を代入します。
そして、round <= 5 という条件が成り立っている間、while文の中にある処理を繰り返します。
1回表示するたびにround++で値を1増やします。
roundが6になると、round <= 5 が成り立たなくなるため、while文の繰り返しが終了します。
| 処理 | 内容 | ドラゴンボール風のイメージ |
|---|---|---|
| int round = 1; | 修行回数を1から始める | 1回目の修行から開始 |
| while (round <= 5) | 5回目まで続ける条件 | 5回以下なら修行続行 |
| printf | 現在の修行回数を表示 | 修行装置のパネルに回数を表示 |
| round++ | 回数を1増やす | 次の修行へ進む |
| roundが6になる | 条件が成り立たなくなる | 修行終了 |
図:while文で修行回数を表示する流れ

この図が示していること
この図では、while文がどのような順番で動くのかを表しています。
まずroundに1を入れます。次に、round <= 5 が成り立っているかを確認します。条件が成り立っていれば、while文の中の処理を実行して修行回数を表示します。
そのあとround++で値を1増やし、もう一度条件確認へ戻ります。
この流れを繰り返し、roundが6になって条件が成り立たなくなると、while文から抜けます。
while文の書式
while文の基本的な書き方は、次の形です。
while (条件式) {
繰り返したい処理
}while文は、丸カッコの中に書いた条件式を確認します。
条件式が成り立っている場合は、中カッコの中に書いた処理を実行します。
処理が終わると、もう一度条件式を確認します。
まだ条件が成り立っていれば、また中の処理を実行します。
条件が成り立たなくなったら、while文の繰り返しは終了します。
| 部分 | 役割 | 今回の例 |
|---|---|---|
| while | 条件が成り立つ間、繰り返す命令 | while |
| 条件式 | 続けるかどうかを判断する条件 | round <= 5 |
| { } | 繰り返す処理の範囲 | printfとround++ |
| 処理 | 条件が成り立つ間に実行される内容 | 修行回数の表示 |
ドラゴンボール風に言えば、while文の条件式は修行装置の判定ルールです。
round <= 5 という条件は、「修行回数が5回以下なら、まだ修行を続ける」という意味になります。
条件を満たしている間は修行を続け、条件を満たさなくなったら修行終了です。
while文は条件を先に確認する
while文で大切なのは、処理を実行する前に条件を確認する という点です。
今回のプログラムでは、最初にroundの値が1です。
int round = 1;そのあと、while文の条件式を確認します。
while (round <= 5)roundは1なので、round <= 5 は成り立ちます。
そのため、中カッコの中の処理が実行されます。
もし最初からroundが6だった場合はどうでしょうか。
int round = 6;この場合、最初の条件確認で round <= 5 が成り立ちません。
そのため、while文の中の処理は1回も実行されません。
| roundの最初の値 | 条件 round <= 5 | while文の中身 |
|---|---|---|
| 1 | 成り立つ | 実行される |
| 5 | 成り立つ | 実行される |
| 6 | 成り立たない | 実行されない |
ドラゴンボール風にたとえるなら、while文は修行を始める前に、まず修行条件を確認する装置です。
条件を満たしていれば修行場に入れますが、条件を満たしていなければ、最初から修行は始まりません。
while文の働きを順番に見る
今回のプログラムでは、while文は次の順番で動きます。
int round = 1;
while (round <= 5) {
printf("%d回目の修行\n", round);
round++;
}処理の流れを表にすると、次のようになります。
| 繰り返し | roundの値 | 条件 round <= 5 | 表示される内容 | round++後 |
|---|---|---|---|---|
| 1回目 | 1 | 成り立つ | 1回目の修行 | 2 |
| 2回目 | 2 | 成り立つ | 2回目の修行 | 3 |
| 3回目 | 3 | 成り立つ | 3回目の修行 | 4 |
| 4回目 | 4 | 成り立つ | 4回目の修行 | 5 |
| 5回目 | 5 | 成り立つ | 5回目の修行 | 6 |
| 終了判定 | 6 | 成り立たない | 表示しない | 終了 |
この流れを見ると、while文は条件確認、処理、値の更新を繰り返していることが分かります。
ドラゴンボール風に言えば、修行装置が毎回こう確認しています。
今の修行回数は5回以下か。
5回以下なら修行を表示する。
終わったら回数を1増やす。
もう一度、5回以下か確認する。
これを、条件が成り立たなくなるまで続けます。
初期化はwhile文の前に書く
for文では、初期化処理、条件式、増分処理を1行の中にまとめて書けました。
for (round = 1; round <= 5; round++)一方で、while文では、丸カッコの中に書くのは条件式だけです。
while (round <= 5)そのため、round = 1 のような初期化処理は、while文の前に書きます。
int round = 1;| 処理 | for文 | while文 |
|---|---|---|
| 初期化 | for文の丸カッコ内に書ける | while文の前に書く |
| 条件式 | for文の丸カッコ内に書く | while文の丸カッコ内に書く |
| 増分処理 | for文の丸カッコ内に書ける | while文の中に書く |
ドラゴンボール風にたとえるなら、for文は修行メニュー表に「開始回数」「続ける条件」「回数の進め方」が全部まとめて書かれています。
一方、while文では「続ける条件」は修行装置に書かれていますが、「最初の回数」と「回数を進める処理」は別の場所に書く必要があります。
ここがfor文とwhile文の大きな違いです。
図:for文とwhile文の書き方の違い

この図が示していること
この図では、for文とwhile文の書き方の違いを表しています。
for文では、初期化処理、条件式、増分処理を1行にまとめて書けます。
一方、while文では、丸カッコの中に書くのは条件式だけです。
そのため、初期化処理はwhile文の前に、増分処理はwhile文の中に書きます。
同じ繰り返し処理でも、どこに何を書くのかが違うことを意識すると、while文が読みやすくなります。
増分処理はwhile文の中に書く
今回のプログラムでは、while文の中にround++があります。
round++;これは、roundの値を1増やす処理です。
このround++があるからこそ、roundは1、2、3、4、5、6と変化していきます。
そしてroundが6になったとき、round <= 5 が成り立たなくなり、while文が終了します。
もしround++を書き忘れると、roundの値はずっと1のままです。
すると、round <= 5 はずっと成り立ち続けます。
その結果、while文が終わらなくなる可能性があります。
while (round <= 5) {
printf("%d回目の修行\n", round);
}このように値を更新しないままだと、条件が変わらず、同じ処理が続き続けてしまいます。
ドラゴンボール風にたとえるなら、修行カウンターが1回目のまま止まっている状態です。
修行装置はいつ見ても「まだ1回目だから続行」と判断してしまい、終わらない修行になってしまいます。
| 状態 | 結果 |
|---|---|
| round++がある | roundが増えて、いつか条件が成り立たなくなる |
| round++がない | roundが変わらず、ループが終わらない可能性がある |
while文では、条件を変化させる処理を忘れないことがとても大切です。
while文で無限ループに注意する
while文では、条件がずっと成り立つと、繰り返しが終わらなくなります。
このような状態を無限ループと呼びます。
無限ループは、意図して使うこともありますが、初心者のうちはうっかり起こしてしまうことが多いです。
たとえば、次のような場合です。
int round = 1;
while (round <= 5) {
printf("%d回目の修行\n", round);
}この場合、round++がないため、roundはずっと1のままです。
そのため、round <= 5 はずっと成り立ち続けます。
| 原因 | どうなるか |
|---|---|
| 変数の値を更新していない | 条件が変わらない |
| 条件がずっと成り立つ | 繰り返しが終わらない |
| 結果 | 無限ループになる可能性がある |
ドラゴンボール風にいうと、修行装置が終了条件を確認しているのに、修行回数カウンターが一切進まない状態です。
いつまでたっても終了条件に届かないため、修行が終わりません。
while文を書くときは、次の3つを確認すると安心です。
| 確認すること | 内容 |
|---|---|
| 初期値はあるか | round = 1 のように開始値を決めているか |
| 条件式は正しいか | round <= 5 のように終了へ向かう条件か |
| 更新処理はあるか | round++ のように値が変化するか |
while文は条件中心で考えると分かりやすい
while文を理解するときは、何回繰り返すかよりも、条件が成り立っているかどうか に注目すると分かりやすくなります。
今回の条件は、次のとおりです。
round <= 5これは、roundが5以下なら繰り返すという意味です。
roundが1、2、3、4、5の間は条件が成り立ちます。
roundが6になると条件が成り立たなくなります。
| roundの値 | round <= 5 | 判断 |
|---|---|---|
| 1 | 真 | 繰り返す |
| 2 | 真 | 繰り返す |
| 3 | 真 | 繰り返す |
| 4 | 真 | 繰り返す |
| 5 | 真 | 繰り返す |
| 6 | 偽 | 終了する |
C言語では、条件が成り立つことを真、成り立たないことを偽と考えます。
while文は、条件式が真の間だけ処理を繰り返します。
ドラゴンボール風にたとえるなら、修行装置が毎回スカウターで条件を確認しているイメージです。
条件OKなら修行続行。
条件NGなら修行終了。
この考え方がwhile文の中心です。
図:while文は条件が真の間だけ繰り返す

この図が示していること
この図では、while文が条件式を確認しながら繰り返す仕組みを表しています。
round <= 5 が真であれば、修行回数を表示してround++を行います。
そのあと、もう一度条件式を確認します。
roundが6になると、round <= 5 が偽になります。
その時点でwhile文は終了し、次の処理へ進みます。
while文は、条件が真の間だけループするという考え方を持っています。
for文とwhile文の使い分け
for文とwhile文は、どちらも繰り返し処理を行うための文です。
では、どのように使い分ければよいのでしょうか。
分かりやすい目安として、繰り返す回数がはっきりしている場合はfor文、条件を中心に考えたい場合はwhile文が向いています。
| 使いたい場面 | 向いている文 | 理由 |
|---|---|---|
| 1から5まで表示したい | for文 | 回数の流れが1行にまとまりやすい |
| 条件が成り立つ間だけ続けたい | while文 | 条件を中心に書ける |
| カウンターを使って回数管理したい | for文またはwhile文 | どちらでも書ける |
| 値がいつ条件を満たさなくなるかを見たい | while文 | 条件確認の流れが見えやすい |
今回のように1から5まで表示する処理は、for文でもwhile文でも書けます。
for文で書くと、開始値、条件、増分がまとまって見えます。
while文で書くと、条件を確認しながら処理を続ける流れが分かりやすくなります。
ドラゴンボール風にたとえるなら、for文は「5回修行する」と決めているメニュー表です。
while文は「修行回数が5回以下なら続ける」と毎回確認する修行装置です。
どちらも大切なので、両方の書き方に慣れておくと、C言語の繰り返し処理がかなり理解しやすくなります。
while文で覚えておきたいポイント
while文を使うときは、次のポイントを意識しましょう。
| ポイント | 内容 |
|---|---|
| 条件式を書く | whileの丸カッコ内に続ける条件を書く |
| 初期化は前に書く | int round = 1 のように開始値を準備する |
| 更新処理を書く | round++ のように値を変化させる |
| 条件が偽になると終了 | round <= 5 が成り立たなくなると抜ける |
| 無限ループに注意 | 値が変わらないと終わらない可能性がある |
while文は、for文よりも書く場所が分かれているため、最初は少し注意が必要です。
初期化、条件式、更新処理の3つを意識すると、while文はかなり読みやすくなります。
今回のプログラムでは、次の3つが対応しています。
| 役割 | 記述 |
|---|---|
| 初期化 | int round = 1; |
| 条件式 | while (round <= 5) |
| 更新処理 | round++; |
この3つがそろっていることで、roundが1から5まで進み、最後に6になったところでwhile文が終了します。
while文は条件を見ながら進む修行メニュー
while文は、条件が成り立っている間、同じ処理を繰り返すための文です。
for文のように、初期化、条件、増分を1行にまとめるのではなく、初期化は前に書き、条件式はwhileの中に書き、更新処理は中カッコの中に書きます。
この書き方に慣れると、while文はとても自然に読めるようになります。
ドラゴンボール風に言えば、while文は修行装置が毎回条件を確認しながら進める特訓です。
roundが5以下なら修行続行。
修行回数を表示したら、round++で次へ進む。
roundが6になったら条件を満たさないので終了。
この流れを理解できれば、while文による繰り返し処理の基本はしっかりつかめています。
C言語では、繰り返し処理を使えるようになると、プログラムでできることが一気に増えます。
同じ処理を何度も書くのではなく、条件を使って効率よく繰り返す。
その基本技として、while文をしっかり身につけていきましょう。
