我没有太多地使用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()
%d
由于论据不足, fscanf() 触发一个警告(您可能看不到,因为您的PHP被错误地配置为隐藏它们),并返回而不读取 $space_sep_vals .
$space_sep_vals
始终传递给 fscanf() (以及来自 printf() / scanf() family参数的正确数量与格式字符串中提供的转换说明符的数量匹配,它们将按照文档中的描述工作。
printf()
scanf()