
C言語のきほん|while文の活用
回数が決まっていない繰り返しは、whileがいちばん自然。入力・判定・ループを組み合わせて、実用プログラムにしていこう。
while文は「いつ終わるか分からない繰り返し」に強い
前回の「1から5まで表示」のように、回数が決まっている繰り返しは for が得意です。
でも現実のプログラムって、回数が最初から決まっていないことの方が多いです。
- 正しい入力が来るまで入力を繰り返す
- 特定の値が入力されたら終了する
- 条件が満たされている間だけ処理する
こういうときに、while文がすごくフィットします。
whileは「条件が真の間は続ける」というシンプルさがあるので、入力と組み合わせると一気に実用っぽくなります。
回数が決まっているか?決まっていないか?の見分け方
| 状況 | 向いている | 例 |
|---|---|---|
| だいたい回数が決まっている | for | 1〜100を表示、配列を0番から最後まで処理 |
| いつ終わるか分からない | while | 正しい入力が来るまで、終了条件が来るまで |
今回の文書はまさに「whileの得意分野」を練習する内容です。
whileで条件を変えて繰り返す(基本パターン)
whileの活用でまず覚えておくと強いのが、この型です。
- 最初に入力する(初回入力)
- 条件が真なら処理する
- 次の入力を受け取って条件を更新する
流れ図イメージ

ここで重要なのは 初回入力が必要 ということです。
初回入力がないと、条件判定に使う変数が未初期化のままになって、変な動きをしやすくなります。
サンプルプログラム
例:0が入力されるまで、入力された数を数えて合計も出す
- 整数を何度も入力
- 0が入力されたら終了
- それまでに入力した個数と合計を表示
0は「終了の合図(センチネル)」として使います。
ファイル名:9_2_1.c
// whileで「0が入力されるまで」入力を繰り返し、個数と合計を求めるプログラム
#include <stdio.h>
int main(void)
{
int n;
int sum = 0; // 合計
int count = 0; // 入力した個数(0は数えない)
printf("整数を入力してください(0で終了)> ");
scanf("%d", &n); // 初回入力(これが大事)
while (n != 0) { // 0が入力されるまで繰り返す
sum += n;
count++;
printf("整数を入力してください(0で終了)> ");
scanf("%d", &n); // 次の入力で条件が変わる
}
printf("入力した個数は%d個、合計は%dです。\n", count, sum);
return 0;
}実行イメージ
整数を入力してください(0で終了)> 5
整数を入力してください(0で終了)> 2
整数を入力してください(0で終了)> -3
整数を入力してください(0で終了)> 0
入力した個数は3個、合計は4です。このプログラムの構成(3パーツ)
| パーツ | 役割 | どこ? |
|---|---|---|
| 初回入力 | 未初期化を防ぐ/最初の条件判定の材料 | 最初のscanf |
| 繰り返し処理 | 条件が真の間の処理 | whileの中 |
| 条件が偽になった後 | ループ終了後の表示 | whileの後 |
この型を覚えるだけで、入力系の課題がかなり解けるようになります。
while文とif文を一緒に使う(繰り返しの中で分岐する)
whileの中にifを入れると、「繰り返しながら、入力に応じて処理を変える」ができます。
これができると、プログラムが一気にそれっぽくなります。
サンプル:偶数ならメッセージを変えて表示する
- 1〜6まで表示
- 偶数なら 偶数です
- 奇数なら 奇数です
ファイル名:9_2_2.c
// whileの中でifを使い、偶数・奇数でメッセージを変えるプログラム
#include <stdio.h>
int main(void)
{
int i = 1;
while (i <= 6) {
if (i % 2 == 0) {
printf("%dは偶数です。\n", i);
} else {
printf("%dは奇数です。\n", i);
}
i++; // 次へ進める更新
}
return 0;
}ここでのポイント
- whileが「繰り返しの枠」
- ifが「その中の分岐」
- i++ が「進行役」(これがないと止まらない)
if文やswitch文の中でwhileを回す(分岐の中で繰り返す)
今度は逆パターンです。
ifのブロックの中でwhileを使うと、状況によって繰り返し方を変えられます。
別例:表示モードでカウントの出し方を変える
- typeを入力(1ならカウントアップ、2ならカウントダウン)
- 1なら 1→3 を表示
- 2なら 3→1 を表示
ファイル名:9_2_3.c
// 入力されたモードに応じて、whileで数値の出し方を変えるプログラム
#include <stdio.h>
int main(void)
{
int type;
printf("モードを選んでください(1:増える 2:減る)> ");
scanf("%d", &type);
if (type == 1) {
int i = 1;
while (i <= 3) {
printf("カウント:%d\n", i);
i++;
}
} else {
int i = 3;
while (i >= 1) {
printf("カウント:%d\n", i);
i--;
}
}
return 0;
}実務っぽい見方
- ifで「処理の方針」を決める
- whileで「方針に沿って繰り返す」
この組み合わせは、メニュー処理や入力処理でよく使います。
実践問題
整数を2つ入力し、2つの合計が10になるまで入力を繰り返してください。
合計が10になったら、達成メッセージを表示して終了します。
実行例
整数を2つ入力してください > 3 3
合計は6です。まだ10ではありません。もう一度入力してください。
整数を2つ入力してください > 4 6
合計は10です。達成しました!解答例
ファイル名:9_2_4.c
// 2つの整数の合計が10になるまで入力を繰り返すプログラム
#include <stdio.h>
int main(void)
{
int a, b;
int sum;
printf("整数を2つ入力してください > ");
scanf("%d%d", &a, &b);
sum = a + b; // 初回計算(最初の判定材料)
while (sum != 10) {
printf("合計は%dです。まだ10ではありません。もう一度入力してください。\n", sum);
printf("整数を2つ入力してください > ");
scanf("%d%d", &a, &b);
sum = a + b; // 次の判定材料に更新
}
printf("合計は10です。達成しました!\n");
return 0;
}解説:この問題がwhile向きな理由
- 何回で合計10になるかは、入力次第で分からない
- 条件が満たされるまで続ける
- 入力のたびに条件が変わる
まさに while の得意パターンです。
