PHPによる標準入力

はじめに

HackerRankに挑戦する機会があったので標準入力に関してまとめました。

以前Paizaの問題を解くために学習してはいたものの、すっかり忘れてしまっていたので復習がてら。

コチラの動画も参考になります⇒Paizaの動画教材(無料)

※以前Paizaを解いた際のまとめ。

Paiza スキルチェック見本問題(PHP編)まとめ ~ランクD相当~

JavaScriptによる標準入力

標準入力・標準出力とは

標準入力とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ入力元。
参照:標準入力とは – IT用語辞典 e-Words

個人的には問題で扱う入力値のことと思っておけばいいかなと思っています。

標準出力はその逆で問題で求められている出力値(解答)のことです。

事前知識

fgets関数 参考

主に1行から1つの値を受け取る際に使用。

例)

$a = fgets(STDIN);

fscanf関数 参考

1行から複数の値を受け取る際に使用。(1行に値が2つスペース区切りである際などに威力を発揮)

例)

$a = fscanf(STDIN, "%d %d", $a, $b);

第一引数で値の受け取り、第二引数でフォーマットの指定(参考ページの指定子が参考になります。ここでは%dで数値を指定。)、それ以降に代入する変数の記載。

・STDIN

標準入力(standard input)を表す定数で、自動的に標準入力の値が入る

値の受け取り方

1行の標準入力

fgets関数を利用したパターン

標準入力(実際に入力される値):
2
3
標準出力(期待される出力):
6
解答コード:
<?php
    $a = fgets(STDIN); //1行目の標準入力の値を$aに代入
    $b = fgets(STDIN); //2行目の標準入力の値を$bに代入
    echo $a*$b; //出力
?>

fscanf関数を利用した別パターン

解答コード(別パターン):
<?php
    fscanf(STDIN, "%d", $a); //1行目の標準入力の値を$aに代入
    fscanf(STDIN, "%d", $b); //2行目の標準入力の値を$bに代入
    echo $a*$b; //出力
?>

標準入力の分割

1行から複数の値を取得したいケース

fgets関数を利用したパターン

実際に入力される値:
1 1
期待される出力:
2
解答コード:
<?php
    $numbers = fgets(STDIN); //$numbersに1 1が代入される
    $number = explode(" ",$numbers); //$numbersをスペースで分割して$numberの通常配列を作成
    echo $number[0]+$number[1]; //配列のインデックス番号を指定して要素を取り出し、計算後、出力
?>

⇒fgets関数を用いた場合は、explode関数で文字列を分割して配列を作ります。

fscanf関数を利用した別パターン

解答コード(別パターン):
<?php
    fscanf(STDIN, "%d %d", $a, $b);
    echo $a+$b;
?>
まさる
個人的には、配列を作らずに変数にダイレクトに値を代入&取り出しができるfscanf関数の方が好みです。
ちょび
でも標準入力される値の数が不透明な場合は配列で作れるfgets関数を必然的に使うことになるよ!使い分けが大事だね!

おわりに

ざっくり復習がてら書いてみました。

(そのあとHackerRankに挑戦したところ、全然通用せず。まずはPaizaのDランクで肩慣らしが必要ですね。。。)

参考

PHPで標準入力から値を受け取る(競技プログラミングとか)

標準入力とは?PHPで標準入力の値を取得する方法(サンプルコードあり)

コメントを残す