как читать, строка от \n разграничила файл

Я пытаюсь читать, возврат разграничил файл. полный фраз.

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

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

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

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

6
задан Daniel Trebbien 21 June 2010 в 14:18
поделиться

4 ответа

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

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

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

2
ответ дан 9 December 2019 в 22:30
поделиться

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

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

3
ответ дан 9 December 2019 в 22:30
поделиться

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

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

2
ответ дан 9 December 2019 в 22:30
поделиться
fscanf(file,"%50[^\n]\n",string);
  1. Каждый символ, кроме \ n , будет поглощен [^ \ n]

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

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

5
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: