как прочитать строку из файла с разделителями n

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

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

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

fscanf(file,"%50sn",string);

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

5 ответов


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

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

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


fscanf(file,"%50[^\n]\n",string);
  1. каждый персонаж, кроме \n будет потреблено [^\n]

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

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


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

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


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

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


intially отправить данные с помощью Payload_ID 00 01 02 03 ....10

использовать

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

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