2017-08-11 68 views
2
like Input is: 
3 
1 2 
2 3 
4 5 

我必须以给定样式采用这些输入。这里(1和2),(2和3)和(4和5)必须采取在一个线作为输入。如何使用php命令行在单行中执行多个标准输入

这是我的代码片段。

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

$testCase = (int) fgets(STDIN); 

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

在C实现++

int main() 
{ 
    int testcase, myPos, liftPos; 

    cin >> testcase; 

    while(testcase--) 
    { 
     cin >> myPos >> liftPos; 
    } 
} 

那么,怎样才能在PHP中实现C++代码?

+0

这是不是一个C++的问题... – YSC

回答

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形成从输入从控制台的阵列。

1

在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。

+0

感谢您的帮助,它的工作 –

+0

@TheExtendable不客气!请记住接受正确的答案,并注意有用的评论和答案。 – Canis