Как узнать символ новой строки в fscanf?
Вопрос
Как узнать, что 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 ()
, чтобы разделить их - или другой более специализированный код синтаксического анализа.