命令行中的PHP没有给予正确的结果

lvmkulzt  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(129)

我使用Windows 11。当我在Windows PowerShell中执行PHP文件时,我没有结果与会者。
例如:

<?php
fscanf(STDIN,"%d",$x);
$tab=array();
for ($i=0;$i<$x;$i++){
    $row = stream_get_line(STDIN,6+1,"\n");
    $tab[] = $row.(strrev($row));
}
echo("\n");
foreach ($tab as $x){
echo($x."\n");
}
foreach (array_reverse($tab) as $x){
    echo($x."\n");
}

结果是

PS C:\wamp64\www\> php tablereverse.php
2
ab
bb

ba
bb
bb
ba

但是如果我用PHPSorm运行这个文件结果是

C:\wamp64\bin\php\php8.1.13\php.exe C:\wamp64\www\tableReverse.php
2
ab
bb

abba
bbbb
bbbb
abba

我使用相同的PHP路径

PS C:\wamp64\www\> php -v
PHP 8.1.13 (cli) (built: Nov 22 2022 15:49:14) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.1.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.13, Copyright (c), by Zend Technologies
nimxete2

nimxete21#

您将\n设置为分隔符:

stream_get_line(STDIN,6+1,"\n");

但是Windows程序通常使用\r\n,这意味着你要反转的字符串包含一个尾随的\r字符,根据显示它的软件,你可能会看到一个实际的回车符,或者这个字符将保持为空(例如,记事本直到最近才显示\r),这就解释了:

ba\r
\rbb\n

...对比:

ba\r\rbb\n

您可以切换到fgets()并自己去除分隔符:

$row = rtrim(fgets(STDIN, 6 + 1));

(我没有解释PhpStorm中看似重复的输出)。

相关问题