无法理解的回声函数格式化

时间:2016-02-29 12:08:06

标签: php

我有一个程序,用于计算客户仓库中两个供应商的最短路径:

$_fp = fopen("php://stdin", "r");
$tcase = fgets($_fp);

for ($a0 = 0; $a0 < $tcase; $a0++)
{            
    $count = fgets($_fp);
    $array = explode(' ', fgets($_fp));
    $max_ending_here = 0;
    $max_so_far = 0;
    $all_positives = 0;

    for($i=0; $i < count($array); $i++)
    {

        $x = $array[$i];
        $max_ending_here = max(0, $max_ending_here + $x);
        $max_so_far = max($max_so_far, $max_ending_here);


        if ($array[$i] >= 0) {
            $all_positives = $all_positives + $array[$i];
        }
    }

    if ($max_so_far > 0) {
        echo $max_so_far . ' ' . $all_positives . "\n";
    } else {
        echo $array[0] . ' ' . $array[0] . "\n";
    }
}
?>

当我放入标准输入时,我在输出上出现意外的格式错误,其中两个负数不会保持在同一行。这发生在最后的else {echo $array[0] . ' ' . $array[0] . "\n";}。我已经尝试了所有我能想到的东西,我仍然得到了一些看起来像的东西:

1 1
-1 -1
1 1
6 6
-10
 -10

5 6

问题是两个-10,是否有某种闻所未闻的线路限制器需要增加?

2 个答案:

答案 0 :(得分:1)

除非达到EOF,否则fgets将返回包含换行符的字符串。我怀疑这是你的问题,因为你永远不会将它转换为整数,也不会剥离换行符。以下任何一种都应该为您解决这个问题:

  1. 更改$array[0] . ' ' . $array[0] . "\n"
    ((int) $array[0]) . ' ' . $array[0] . "\n"

  2. 更改$array = explode(' ', fgets($_fp));
    $array = explode(' ', trim(fgets($_fp)));

答案 1 :(得分:1)

\n的字符串末尾看起来有换行符($array[0])。

应该打印-10时,-10\n中有$array[0]

请尝试更换

$array = explode(' ', fgets($_fp));

$array = explode(' ', fgets($_fp));
$array = array_map('trim', $array);

删除字符串中的空格,换行符等。