概要
for 文が「N 回繰り返す」のに向いているのに対し、while 文 は「条件が真の間だけ繰り返す」のに向いている。回数が事前に分からない処理 — たとえば「ユーザーが quit と入力するまで」「ファイルの末尾に到達するまで」「合計が 100 を超えるまで」のような、終了条件が状態で決まる ループは while の方が自然に書ける。
文法は while (条件) { ... } とシンプルで、for から「初期化」と「更新」の枠を外し、条件チェックだけを残した形だと考えると分かりやすい。代わりに、カウンタやフラグの更新は 自分でループ本体の中に書く 必要がある。$i = 0 のような初期化はループの前で、$i++ のような更新は本体の中で、と役割を意識的に分けて書くのがコツだ。
while で最大の落とし穴が 無限ループ だ。while (true) と書いたまま break を入れ忘れたり、条件に使っている変数を本体で更新し忘れると、プログラムは永遠に止まらない。for の場合は更新式が文法に組み込まれているので忘れにくいが、while は自由度が高い分、書き手が「いつ条件が変わるか」を意識する責任を負う。書き終わったら必ず「この条件は、本当にいつか偽になるか」を 1 回自問する習慣をつけよう。
学習目標
while (条件) { ... }の形を書ける- 条件が真の間だけ繰り返されることを理解する
- カウンタを自分で更新しないと無限ループになると分かる
ドリル
| no | 内容 |
|---|---|
| 01 | 入力 N から 1 まで降順で出力 |
| 02 | 0 が入力されるまで数を読み続け、合計を出力 |
📝 演習: ドリル 01 — 降順カウント
問題
標準入力で整数 N を 1 行受け取り、N から 1 まで降順で 1 行ずつ出力してください。
入力例:
5
期待される出力:
5
4
3
2
1ヒント
$n = (int) trim(fgets(STDIN));で N を読むwhile ($n >= 1)で N が 1 以上の間ループ- ループの中で
$n--;(1 減らす) を忘れずに
📝 演習: ドリル 02 — 0 まで足し続ける
問題
標準入力から 整数を 1 行ずつ何度も 読み、0 が入力されたら終了して、それまでに読んだ整数の合計を出力してください (※ 0 自身は合計に含めない・含めても結果は同じです)。
入力例:
3
5
2
8
0
期待される出力:
18ヒント
$sum = 0;で合計用の変数を用意$n = (int) trim(fgets(STDIN));を ループの前にも中にも 入れるwhile ($n !== 0) { $sum += $n; $n = (int) trim(fgets(STDIN)); }- 最後に
echo $sum . "\n";