scanf — Невозможно прочитать разделенные табуляцией значения в PHP с помощью fscanf ()

Я не очень много использовал функцию 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

0

Решение

Проблема здесь:

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

Строка формата fscanf() содержит 3 спецификатора преобразования %d но вы предоставили только одну переменную для хранения прочитанных значений.

Из-за недостаточных аргументов, fscanf() выдает предупреждение (вы, вероятно, не видите, потому что ваш PHP неправильно настроен на их скрытие) и возвращается, не читая ничего в $space_sep_vals,

Всегда переходите к fscanf() (и любая другая функция из printf()/scanf() укажите в семействе правильное число аргументов, соответствующее количеству спецификаторов преобразования, указанных в строке формата, и они будут работать, как описано в документации.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]