我很少使用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
问题就在这里:
fscanf(STDIN, "%d't%d't%d'n", $space_sep_vals);
fscanf()
的格式字符串包含3个转换说明符%d
,但您只提供了一个变量来存储读取的值。
由于参数不足,fscanf()
会触发一个警告(您可能没有看到,因为您的PHP被错误地配置为隐藏它们),并在不读取$space_sep_vals
中任何内容的情况下返回。
始终将与格式字符串中提供的转换说明符数量匹配的正确数量的参数传递给fscanf()
(以及printf()
/scanf()
系列中的任何其他函数),它们将按照文档中的说明工作。