採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

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 との違い

forwhile
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";