問題
PHPで解いています。
解答
<?php
$inputs = [];
while (fscanf(STDIN, "%d", $number) == 1 && $number !== 0) {
$inputs[] = $number;
}
echo 0 . "\n";
$reversed = array_reverse($inputs);
foreach($reversed as $value){
echo $value.PHP_EOL;
}
つまづいたポイント
0の入力、出力の理解
すべての整数配列に追加してから逆順に出力していたため、0 が最後に出てこなかった。
私は0も含めて逆順にする構文を書いていました。
しかし要件には0を最初に出力し、残りを逆順に出力すると書いてあります。
これらは一見結果が同じように見える場合もありますが、要件に明示された通りに処理を行うことが正しい方法です。
fscanf の動作
fscanf 関数は、標準入力(STDIN)からデータを読み取り、指定された形式(ここでは "%d" という整数形式)に従って変数に格納します。
while (fscanf(STDIN, "%d", $number) == 1 && $number !== 0) {
$inputs[] = $number;
}
この場合、1つの整数を読み取るので、正常に読み取れれば 1 を返します。
読み取りに失敗した場合(例えば、入力が終了した場合や形式が合わない場合)は 0 あるいは EOF を返します。