Чем файл с данными в одну строку отличается от файла с данными в несколько строк.Как он читает \ n и как я могу прочитать только первую строку или секунду, например?
Это еще один забавный факт о семействе scanf
.Учитывая вызов
fscanf(fi, "%d %d", &used, "a)
и строку ввода
10 20
, он успешно прочитает 10 для used
и 20 для quota
, что, вероятно, было то, что вы имели в виду.Но если бы вы дали ему ввод
10
20
, он также с радостью прочитал бы 10 для used
и 20 для quota
.На самом деле это будет работать так же хорошо для ввода
10
20
с пустой строкой там.Более того, у вас нет абсолютно никакого способа (то есть автора кода, который вызывает fscanf
) определить, был ли ввод одной строкой или двумя строками, или что.
СледуетРазве это не равно EOF
, как он поймет, что программа достигла конца?
Это правда: если fscanf
достигает конца файла перед преобразованием любого ввода, он возвращает EOF
, и это то, что вы хотели бы знать.Но это не единственное условие ошибки, о котором вы, возможно, захотите знать.
Предположим, что в строке ввода указано
10 abc 20
В этом случае вызов fscanf
вернет 1, указывая, чтосмог прочитать значение 10 для used
, но не смог ничего прочитать для quota
.
Причина для проверки на 2 (как в коде, который вы спрашивали) заключается в том, что толькоесли fscanf
возвращает 2, прочитал ли он и преобразовал значение для обеих переменных.