Я не очень много использовал функцию fscanf. Я пытаюсь решить эту проблему на хакерской земле, где они позволяют тестировать программу, предоставляя ей какой-то ввод. Похоже, что входные данные обрабатываются как файл, потому что для их чтения используется fscanf. Ниже приведен ввод, который я пытаюсь проанализировать —
1
50 40 30
(2-я строка содержит значения, разделенные табуляцией)
Ниже мой код —
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()
укажите в семействе правильное число аргументов, соответствующее количеству спецификаторов преобразования, указанных в строке формата, и они будут работать, как описано в документации.
Других решений пока нет …