代码之家  ›  专栏  ›  技术社区  ›  Sandeepan Nath

无法使用fscanf()读取PHP中的制表符分隔值

  •  0
  • Sandeepan Nath  · 技术社区  · 10 年前

    我没有太多地使用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
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   axiac    10 年前

    问题在于:

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

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

    由于论据不足, fscanf() 触发一个警告(您可能看不到,因为您的PHP被错误地配置为隐藏它们),并返回而不读取 $space_sep_vals .

    始终传递给 fscanf() (以及来自 printf() / scanf() family参数的正确数量与格式字符串中提供的转换说明符的数量匹配,它们将按照文档中的描述工作。