如何使用php命令行在一行中获取多个标准输入

时间:2017-08-11 11:26:50

标签: php stdin

java.lang.ClassCastException: java.lang.StackOverflowError cannot be cast to java.lang.RuntimeException
at retrofit2.OkHttpCall.request(OkHttpCall.java:63)
at lfs.mortuary.CorpseService$1.onFailure(CorpseService.java:59)
at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:99)
at lfs.mortuary.CorpseService.save(CorpseService.java:50)
at lfs.common.DAO.save(DAO.java:54)
at fastfx.view.InputFormDialog.saveOrUpdate(InputFormDialog.java:155)
at fastfx.view.InputFormDialog.lambda$0(InputFormDialog.java:131)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)

我必须以给定的方式接受这些输入。这里(1和2),(2和3)和(4和5)必须输入一行作为输入。

这是我的代码段。

like Input is:
3
1 2
2 3
4 5

在C ++中实现

 <?php
header('Content-Type: text/plain');

$testCase = (int) fgets(STDIN);

while($testCase--) {
    $myPosition = (int) fgets(STDIN);
    $liftPosition = (int) fgets(STDIN);
}

那么,如何在PHP中实现C ++代码?

2 个答案:

答案 0 :(得分:2)

PHP中的等价物是:

<?php
header('Content-Type: text/plain');

$testCase = (int) fgets(STDIN);

while($testCase--) {
    $input = fgets(STDIN);
    $inputParts = preg_split("/[\s]+/",$input);
    $myPosition = (int)$inputParts[0];
    $liftPosition = (int)$inputParts[1];
}

这是因为您的示例中的C类型移位运算符将两个数字都作为单独的数字。它使用空白字符自动分隔。因此,您需要手动拆分PHP中的输入字符串。

答案 1 :(得分:1)

实际上,问题出在以下几行:

$myPosition = (int) fgets(STDIN);

在这里,显式转换为int会丢弃空格后的值,因此当您在命令行中输入1 2时,(int)会将其转换为1而您正在失去另一个角色。

$arr = [];
$testCase = (int) fgets(STDIN);

while ($testCase--) {
    list($a, $b) = explode(' ', fgets(STDIN));
    $arr[] = $a.' '.$b;
}

print_r($arr);

上述解决方案有效,因为我已从(int)的开头删除了fgets。另请注意,我在这里使用list($a, $b),这实际上会在当前范围内创建两个变量$a and $b,因此我总是假设,您将使用两个单独的数字(即:1 2),否则您可以使用$inputParts = preg_split("/[\s]+/",$input)explode的其他内容从控制台的输入中形成数组。