while 文
テクノロジ系 / loop (for / while / break / continue)
while 文
Lesson 3 / Chapter 2
for だと書きづらい場面がある
- 「N 回繰り返す」 →
forが向いている - 「いつ終わるか分からない」 →
forだと書きづらい - 例: 「ユーザーが 0 を入力するまで読み続ける」
→ こういう時は while を使う
while 文の形
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
$i++;
}実行結果:
1 2 3 4 5
while (条件) { 処理 }- 条件が真の間、
{ }の中を繰り返す
for との違い
| for | while | |
|---|---|---|
| 形 | for (初期化; 条件; 更新) | while (条件) |
| カウンタ | for の括弧内に書く | 自分で外に書く + 更新 |
| 向いてる場面 | 回数が決まっている | 終わりが条件次第 |
// for
for ($i = 1; $i <= 5; $i++) { echo $i; }
// 同じ意味の while
$i = 1;
while ($i <= 5) { echo $i; $i++; }更新を忘れると無限ループ
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
// $i++; を書き忘れた!
}$iがずっと 1 のまま- 条件
$i <= 5が永遠に真 - → 無限ループ (Ctrl+C で止めるしかない)
while を書いたら 必ず終わる条件があるか を確認する。
条件で終わりを決める例
<?php
$n = 100;
while ($n > 1) {
$n = (int)($n / 2);
echo $n . "\n";
}実行結果:
50 25 12 6 3 1
$nが 1 以下になったら終わる- 回数は事前に分からないが 条件で自然に止まる
このチャプターでできるようになること
✅ while (条件) { ... } を書ける
✅ 条件が真の間だけ繰り返されると理解している
✅ カウンタを自分で更新する必要があると分かる
✅ 終わる条件が無いと無限ループになると分かる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — 降順カウント
問題
標準入力で整数 N を 1 行受け取り、N から 1 まで降順で 1 行ずつ出力してください。
入力例:
5
期待される出力:
5 4 3 2 1
採点
php scripts/grade.php topics/loop/ch02-while/drill/01-count-down/
ヒント
$n = (int) trim(fgets(STDIN));で N を読むwhile ($n >= 1)で N が 1 以上の間ループ- ループの中で
$n--;(1 減らす) を忘れずに
ドリル 02 — 0 まで足し続ける
問題
標準入力から 整数を 1 行ずつ何度も 読み、0 が入力されたら終了して、それまでに読んだ整数の合計を出力してください (※ 0 自身は合計に含めない・含めても結果は同じです)。
入力例:
3 5 2 8 0
期待される出力:
18
採点
php scripts/grade.php topics/loop/ch02-while/drill/02-sum-until/
ヒント
$sum = 0;で合計用の変数を用意$n = (int) trim(fgets(STDIN));を ループの前にも中にも 入れるwhile ($n !== 0) { $sum += $n; $n = (int) trim(fgets(STDIN)); }- 最後に
echo $sum . "\n";