Как прочитать строку из файла \ n с разделителями - PullRequest
6 голосов
/ 27 апреля 2010

Я пытаюсь прочитать файл с разделителями возврата. полный фраз.

Я пытаюсь поместить каждую фразу в строку.

Проблема в том, что когда я пытаюсь прочитать файл с

fscanf(file,"%50s\n",string);

строка содержит только одно слово. когда он сталкивается с пробелом, он прекращает читать строку

Ответы [ 5 ]

5 голосов
/ 27 апреля 2010
fscanf(file,"%50[^\n]\n",string);
  1. Каждый символ, кроме \n, будет использован [^\n]

  2. Максимум 0f 50 символов будет использовано (убедитесь, что в строке есть местодля 51 по крайней мере)

  3. ..\n",string это гарантирует, что \n также используется, так что следующий вызов не просто возвращаетпустая строка.

3 голосов
/ 27 апреля 2010

fscanf с %s прекращает чтение, когда находит пробел.

Поскольку вы читаете неформатированный текст, вы можете просто использовать fgets, который читает, пока не заполнит буфер, который вы ему даете, он находит новую строку (\n) или достигает конца файла, в зависимости от того приходит первым.

2 голосов
/ 27 апреля 2010

Избегайте использования scanf. Как уже упоминалось, вы должны использовать fgets вместо.

Если вы не хотите использовать буфер фиксированного размера и разрешать строки произвольной длины, вы можете попробовать использовать Публичный домен Чака Фальконера ggets function . (Эта ссылка сейчас недоступна, но archive.org имеет копию .)

2 голосов
/ 27 апреля 2010

fscanf может быть изменен для чтения прошедших пробелов. Детали немного сложны. Вот что говорит справочная страница о% [...]

Соответствует непустой последовательности символы из указанного набора принятые персонажи; следующий указатель должен быть указатель на символ, и там должно быть достаточно места для всех символы в строке плюс завершающий символ NUL. Обычный пропуск ведущих пробелов подавлено. Строка должна быть сделана состав персонажей в (или не в) конкретный набор; набор определяется символы между открытым скобка [символ и близкий скобка] символ. Набор исключает эти символы, если первый символ после открытой скобки является огибающий Чтобы закрыть кронштейн в комплекте, сделай его первым символ после открытой скобки или огибающий; любая другая позиция закончит набор. Дефис характер - тоже особенный; когда помещается между двумя другими персонажами, он добавляет все промежуточные символы в набор. Чтобы включить дефис, сделайте это последний персонаж перед финалом закрыть скобку. Например, `[^] 0-9-] 'означает набор` `все кроме закрывающей скобки, через ноль девять и дефис ''. Строка заканчивается с появлением персонажа не в (или с окружностью, в) наборе или когда ширина поля заканчивается.

Итак,% [^ \ n] должен прочитать все до возврата каретки.

0 голосов
/ 04 мая 2017

отправлять данные с использованием Payload_ID 00 01 02 03 .... 10

использование

char * pChar = ""; // для захвата строки.

fprintf (fp1, "% s", strtok (pChar, "Payload_ID"));

...