Вопрос

Как узнать, что fscanf достиг новой строки \ n в файле. Я использовал свои собственные функции для этого. Я знаю, что могу использовать fgets, а затем sscanf для моего требуемого шаблона. Но мои требования нестабильны, иногда я хочу получить разделенные табуляцией строки, иногда новые строки, разделенные специальными символами. Так что, если есть какой-либо способ узнать о новой линии от fscanf, пожалуйста, помогите мне. Или любые альтернативные способы также приветствуются.

Заранее спасибо.

Это было полезно?

Решение

fscanf(stream, "%42[^\n]", buffer);

является эквивалентом fgets (buffer, 42, stream). Вы не можете заменить 42 на *, чтобы указать длину буфера в аргументе (как вы можете сделать в printf), его значение состоит в том, чтобы подавить присваивание. Так

fscanf(stream, "%*[^\n]%*c");

прочитайте (и включите) следующий символ конца строки.

Любой спецификатор преобразования, кроме [, c и n, начинается с пропуска пробелов.

Другие советы

Керниган и Пайк в превосходной книге Практика программирования 'показать, как использовать sprintf () для создания соответствующего спецификатора формата, включая длину (аналогично примерам ответа AProgrammer), а затем использовать это при вызове scanf () . Таким образом, вы также можете управлять разделителями. Опасения по поводу «неэффективности» этого подхода, вероятно, ошибочны - альтернативы сложнее понять.

Тем не менее я обычно не использую семейство функций scanf () для файлового ввода-вывода; Я получаю данные в строку с помощью некоторой подпрограммы 'get line', а затем использую семейство функций sscanf () , чтобы разделить их - или другой более специализированный код синтаксического анализа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top