代码取自hackerrank.com
文件名php://stdin
5 4
1 2 3 4 5
代码:
<?php
$handle = fopen ("php://stdin", "r");
fscanf($handle, "%i %i", $n, $d);
$a_temp = fgets($handle);
$a = explode(" ",$a_temp);
print_r($a_temp);
?>
输出:
1 2 3 4 5
我很困惑,为什么代码只读取第二行(i.e 1 2 3 4 5
),而不是第一行?如何阅读这两行?还是只是第一个?
答案 0 :(得分:2)
代码工作正常。
每次拨打fscanf
时,您正在阅读文件的一行。这意味着,在执行fscanf($handle, "%i %i", $n, $d)
之后,文件指针会跳转到第二行。
检查变量$n
和$d
,两者应分别等于5
和4
。
如果您要阅读并解析所有行,请避免使用fscanf
,因为每行的模式不同:
$handle = fopen("php://stdin", "r");
while ($line = fgets($handle)) {
$a = explode(" ", $line);
var_dump($a);
}
答案 1 :(得分:1)
另一种出路方式
$handle = fopen ("php://stdin");
$numbers = str_replace("\n", ' ', $handle);
$numbers = explode(' ', $numbers);
foreach($numbers as $key => $value)
if($value == '')
unset($numbers[$key]);
echo '<pre>';
print_r($numbers);
输出:
Array
(
[1] => 5
[2] => 4
[3] => 1
[4] => 2
[5] => 3
[6] => 4
[7] => 5
)