Почему изображение поворачивается после инициализации из ресурсов?

Похоже, что fgets читает остальные записи, а затем сохраняет их все в одной строке.

blockquote>

Да, '\r' не является терминатором строки. Поэтому, когда fscanf перестает разбираться с первым недопустимым символом и оставляет их в буфере, тогда fgets будет читать их до конца строки. И поскольку в файле нет допустимых терминаторов строк, то есть до конца файла.

Вероятно, вы должны исправить файл, чтобы иметь окончательные строки (Unix?), Например, с подходящим текстовым редактором, который может сделай это. Но это еще один вопрос, который был задан раньше (например, здесь ) и зависит от деталей, не включенных в ваш вопрос.

Кроме того, вам нужна двойная проверка для fscanf возвращаемое значение. Используйте perror, только если возвращаемое значение равно -1, в противном случае сообщение об ошибке вообще не будет связано с ошибкой. Если возвращаемое значение равно >=0, но отличается от того, что вы хотели, тогда напечатайте собственное сообщение об ошибке «недопустимый синтаксис ввода» или что угодно (и, возможно, используйте fgets для чтения остальной части строки из буфера).

Кроме того, чтобы надежно смешивать scanf и fgets, мне нужно добавить пробел в строку формата fscanf, чтобы он считывал любые пробелы в конце строки (также в начале следующей строки и любые пустые строки, поэтому будьте осторожны, если это имеет значение):

int items_read = scanf("%d ", &intvalue);

Как указано в другом ответе, лучше всего читать строки только с помощью fgets , затем проанализируйте их с помощью sscanf по очереди.

0
задан AppsDev 5 March 2019 в 18:28
поделиться