ch08 8章中 8章目

ch08 — 標準入力

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch08 — 標準入力」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch08 — 標準入力」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch08 — 標準入力」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

ここまでは出力 (echo) ばかりだったが、プログラムが本当に役に立つのは 外から値を受け取って、それに応じて結果を変える ようになってから。CLI スクリプトで対話的にユーザーから 1 行入力をもらう手段が fgets(STDIN) で、「名前を入力して挨拶を返す」「2 つの数字を足し算する電卓」のようなミニアプリが書けるようになる。

fgets(STDIN) には 2 つの定石 がある。1 つ目は 末尾の改行 \ntrim() で除去する こと。ユーザーが Enter を押すとその改行までが入力に含まれ、そのまま echo で出すと余計な行が増えたり、"5\n" === "5" で比較がズレたりする。2 つ目は 数値として使うときに (int) でキャストする こと。fgets() が返すのは常に文字列なので、暗黙の型変換に頼ると "3a" のような不正値が黙って 3 として扱われる。明示的に (int)trim(fgets(STDIN)) と書く形を手癖にしておきたい。

なお Web の世界では $_GET$_POST で同様の「外から値を受け取る」を行うが、これはブラウザ経由の入力で、本章で扱う CLI の標準入力とは別の仕組みだ。Web 側は後の web トピックで改めて扱うので、ここでは 「CLI ではどう受け取るか」 に集中してよい。

学習目標

  • fgets(STDIN) で 1 行入力を受け取れる
  • trim() で末尾の改行を取り除ける
  • (int) で文字列を整数に変換して計算できる

ドリル

no 内容
01 入力された文字列をそのまま出力
02 2 行の整数を読んで合計を出力

解説スライド 全 7 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. 標準入力

    Lesson 1 / Chapter 8

  2. 標準入力とは

    • ターミナルやファイルから プログラムに値を渡す 仕組み
    • これまでは echo で出すだけだった
    • 入力を受け取れると 対話するプログラム が書ける

    実行イメージ:

    $ echo "太郎" | php hello.php
    こんにちは 太郎 さん
  3. fgets(STDIN) で 1 行読む

    <?php
    $line = fgets(STDIN);
    echo $line;
    • STDIN = 標準入力
    • fgets(STDIN)改行までの 1 行 を読み取る
    • 読んだ結果は 文字列 として変数に入る
  4. 改行が残るので trim() で取る

    <?php
    $line = fgets(STDIN);
    echo "[" . $line . "]\n";       // 改行残り
    echo "[" . trim($line) . "]\n"; // 改行除去

    入力が 太郎 のとき:

    [太郎
    ]
    [太郎]
    • fgets末尾の改行を含めて 返す
    • trim() で改行や前後の空白を取り除く
    • 入力を扱う時はほぼ毎回 trim() する
  5. 数値として計算したい時は (int) で変換

    <?php
    $line = fgets(STDIN);
    $n = (int) trim($line);
    echo $n + 1;
    echo "\n";

    入力が 5 のとき出力は 6

    • fgets で読んだ値は 文字列
    • "5" + 1 でも一応動くが、明示的に (int) で変換する
    • (int) は「整数に直して」という意味
  6. 複数行の入力を読む

    <?php
    $a = (int) trim(fgets(STDIN));
    $b = (int) trim(fgets(STDIN));
    echo ($a + $b) . "\n";

    入力:

    3
    5

    出力:

    8
    • fgets(STDIN)入力の行数だけ 呼ぶ
    • 各行を trim() して (int) で数値化
  7. このチャプターでできるようになること

    fgets(STDIN) で 1 行入力を読める ✅ trim() で改行を取り除ける ✅ (int) で文字列を整数に変換して計算できる ✅ 複数行の入力を順に読める

    → ドリルへ

1 / 7
📜 スライドを全部一気に読む(縦表示)

Lesson 1 / Chapter 8


標準入力とは

  • ターミナルやファイルから プログラムに値を渡す 仕組み
  • これまでは echo で出すだけだった
  • 入力を受け取れると 対話するプログラム が書ける

実行イメージ:

$ echo "太郎" | php hello.php
こんにちは 太郎 さん

fgets(STDIN) で 1 行読む

<?php
$line = fgets(STDIN);
echo $line;
  • STDIN = 標準入力
  • fgets(STDIN)改行までの 1 行 を読み取る
  • 読んだ結果は 文字列 として変数に入る

改行が残るので trim() で取る

<?php
$line = fgets(STDIN);
echo "[" . $line . "]\n";       // 改行残り
echo "[" . trim($line) . "]\n"; // 改行除去

入力が 太郎 のとき:

[太郎
]
[太郎]
  • fgets末尾の改行を含めて 返す
  • trim() で改行や前後の空白を取り除く
  • 入力を扱う時はほぼ毎回 trim() する

数値として計算したい時は (int) で変換

<?php
$line = fgets(STDIN);
$n = (int) trim($line);
echo $n + 1;
echo "\n";

入力が 5 のとき出力は 6

  • fgets で読んだ値は 文字列
  • "5" + 1 でも一応動くが、明示的に (int) で変換する
  • (int) は「整数に直して」という意味

複数行の入力を読む

<?php
$a = (int) trim(fgets(STDIN));
$b = (int) trim(fgets(STDIN));
echo ($a + $b) . "\n";

入力:

3
5

出力:

8
  • fgets(STDIN)入力の行数だけ 呼ぶ
  • 各行を trim() して (int) で数値化

このチャプターでできるようになること

fgets(STDIN) で 1 行入力を読める ✅ trim() で改行を取り除ける ✅ (int) で文字列を整数に変換して計算できる ✅ 複数行の入力を順に読める

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 01-echo-input starter.php answer.php
  2. 02 ドリル 02 — 入力された 2 つの整数を足す README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 02 — 入力された 2 つの整数を足す

問題

標準入力で 2 行 受け取り、それぞれを整数として読み、合計を出力してください。

入力例:

3
5

期待される出力:

8

ヒント

  • fgets(STDIN)2 回 呼んで 2 行読む
  • 各行を trim() して (int) で整数に変換する
  • $a + $b の結果を "\n" を付けて出力する

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(2問)

  1. 01-echo-input

    starter.php answer.php

  2. ドリル 02 — 入力された 2 つの整数を足す

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます