はじめに
HackerRankに挑戦する機会があったので標準入力に関してまとめました。
以前Paizaの問題を解くために学習してはいたものの、すっかり忘れてしまっていたので復習がてら。
コチラの動画も参考になります⇒Paizaの動画教材(無料)
※以前Paizaを解いた際のまとめ。
標準入力・標準出力とは
参照:標準入力とは – 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; ?>


おわりに
ざっくり復習がてら書いてみました。
(そのあとHackerRankに挑戦したところ、全然通用せず。まずはPaizaのDランクで肩慣らしが必要ですね。。。)