【问题标题】:How to read a line of numbers in php with fscanf如何使用 fscanf 在 php 中读取一行数字
【发布时间】:2019-03-05 19:36:39
【问题描述】:

我正在使用来自 STDIN 的输入

第一行是我存储在 $t 中的数字

fscanf(STDIN, "%s\n", $t);

第二行是两个整数

我不知道如何将它们存储在数组中。

如果我这样做

fscanf(STDIN, "%s\n", $n[]);

我得到一个只有第一个值的数组。 我不知道我在这里做什么,谢谢

【问题讨论】:

  • 您是否提前知道任何给定行中有多少个数字? fscanf 在任何情况下都适用于标量,因此要读取两个值,您必须执行 fscanf(STDIN, "%d %d\n", $n[0], $n[1]); - 如果值用空格分隔。
  • @Jakumi 是的,我知道会有多少价值。谢谢您的回答。你能告诉我%d是什么意思吗,这是怎么回事,我不明白
  • php.net/sprintf 描述了php.net/fscanf 的格式参数。它说“我希望这里有一个数字”,%s 是任何字母数字* 序列。 fscanf 本质上会查看您获得了多少占位符,并将尝试相应地填充给定的参数。所以如果你期望两个数字,你必须告诉 fscanf 有两个,并提供两个参数来存储它们。本质上:阅读文档。 ;o/ 还有,第二种使用方式可能更简单...

标签: php stdin


【解决方案1】:

这可能更容易

$n = fscanf(STDIN, "%d %d\n");

参见https://php.net/fscanf 的示例(https://php.net/sprintf 的参数说明)

$n 将是一个数组。如果您需要单独的值,请使用标准语法 fscanf(STDIN, "%d %d\n", $value1, $value2) 或使用 list 语法:list($value1, $value2) = fscanf(STDIN, "%d %d\n")

我更喜欢返回值,因为它在语义上看起来更直观,但它可能只是一种偏好/品味。

【讨论】:

  • 如果我需要一个数组中的 100 个项目,那么我需要在 fscanf 函数中使用 100 次 %d
  • 基本上是的。可能有一些方法可以使用 str_repeat 更轻松地编写它,或者您可以调用 fscanf 100x 并在这样做时注意换行符和空格,但最后您要么使用 100 %d 进行扫描,要么使用 100 进行扫描%d(以及更多逻辑)。我可能会使用rtrim(str_repeat('%d ', 100)) . "\n" 来创建扫描字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2014-11-29
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2017-12-05
  • 2018-03-21
相关资源
最近更新 更多