今回はAtCoderやPaizaなどで使える、PHPで標準入力を使う方法を解説します。
一行だけ取得
まず一番基本になるのは、入力から一行だけ取得する方法です。
下記のコードで取得できます。
$value = trim(fgets(STDIN));
trim,fgets,STDINとは?
trimは文字列の先頭と末尾から余計な空白を取り除くための関数です。
余計な空白とは、「半角スペース」や「タブ」のことを指しています。
標準入力を取得したときに、余計な空白が入ってることでバグらないために書きます。
fgetsはファイルから一行だけ読み込むとだけ覚えておけば大丈夫です。
STDINは「スタンダードイン」と読み、標準入力のことを指します。
つまり下記のコードは
trim(fgets(STDIN));
「標準入力から一行だけ読み込んで、不要な空白を削除したもの」という意味になっているわけですね。
これを使うと、例えば標準入力が
Hello
だった場合は、
$value = trim(fgets(STDIN));
echo $value;
とすれば、出力は
Hello
となります。
まとめ
標準入力から一行だけ取得するには
trim(fgets(STDIN));
なるほど簡単
ちなみに
仮に入力が下記のように2行あるとします。
12
34
この場合に下記のようなコードにすると
$value1 = trim(fgets(STDIN));
$value2 = trim(fgets(STDIN));
echo $value1;
echo $value2;
出力は下記のようになります。
12
34
これはなぜなのでしょうか?
一行だけ取得するはずのコードを2回書いただけなのに、なぜちゃんと2行目が認識されているのでしょうか?
実はこれはコード内でfgets(STDIN)関数が連続して2回呼び出されているから、という単純な理由です。
ちゃんと自動で一行ずつ見てくれるので、「2行目を見て!」と指示を明確に書かなくても、
勝手に関数が呼び出された順番に行を読み取ってくれるんですね。(かしこい)
これはPHPに限った挙動ではありません。Pythonなど他の言語でも同様の挙動をします。
Pythonだとこんな感じ↓
value1 = input().strip()
value2 = input().strip()
print(value1)
print(value2)
なんかおまけが長くなっちゃいました。
こういうもんだよ~くらいで覚えておいてください。
勉強になったっす