【问题标题】:Unable to read tab separated values in PHP using fscanf()无法使用 fscanf() 在 PHP 中读取制表符分隔值
【发布时间】:2016-03-27 12:16:24
【问题描述】:

我没怎么用过 fscanf 函数。我试图在黑客地球上解决这个问题,他们允许通过输入一些输入来测试程序。输入被视为文件,看起来,因为 fscanf 用于读取它。以下是我要解析的输入 -

1
50  40  30

(第二行包含制表符分隔值)

以下是我的代码 -

fscanf(STDIN, "%s\n", $test_cases);
echo "Test ".$test_cases;

fscanf(STDIN, "%d\t%d\t%d\n", $space_sep_vals);
echo "\n\nOutput ".$space_sep_vals;

以下是我的输出 -

Test 1

Output

第二个 fscanf() 没有解析任何内容。

如果我把它改成 -

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

它解析第一个数字。输出 -

Test 1

Output 50

【问题讨论】:

    标签: php scanf


    【解决方案1】:

    问题出在这里:

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

    fscanf() 的格式字符串包含 3 个转换说明符 %d 但您只提供了一个变量来存储读取的值。

    由于参数不足,fscanf() 触发警告(您可能看不到,因为您的 PHP 被错误配置为隐藏它们)并返回而不读取 $space_sep_vals 中的任何内容。

    始终传递给fscanf()(以及printf()/scanf() 系列中的任何其他函数)与格式字符串中提供的转换说明符数量匹配的正确参数数量,它们将按照文档中的说明工作。

    【讨论】:

    • 啊,明白了。。谢谢!我期待整个解析的东西变成一个变量。我已经很久没有在 C 中使用 scanf() 函数了:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多