Я пытаюсь читать, возврат разграничил файл. полный фраз.
Я пытаюсь поместить каждую фразу в строку.
Проблема - это, когда я пытаюсь считать файл с
fscanf(file,"%50s\n",string);
строка только содержит одно слово. когда это наталкивается с пространством, это прекращает читать строку
fscanf можно изменить для чтения прошедших пробелов. Детали немного сложны. Вот что на странице руководства говорится о% [... ]
Соответствует непустой последовательности символов из указанного набора разрешенных символов ; следующий указатель должен быть указателем на char, а там должно быть достаточно места для всех символов в строке плюс завершающий символ NUL . Обычный пропуск начального пробела подавляется . Строка должен состоять из символов в (или не в) определенном наборе; набор определяется символами между открывающей скобкой [ символ и закрывающая скобка ].Набор исключает эти символы, если первый символ после открытой скобки представляет собой циркумфлекс ^. Чтобы включить в набор закрывающую скобку , сделайте ее первым символом после открытой скобки или циркумфлекса; любая другая позиция завершит набор. Знак дефиса - тоже особенный; когда помещается между двумя другими символами, он добавляет все промежуточные символы к набору. Чтобы включить дефис, сделайте его последним символом перед последней закрывающей скобкой . Например, `[^] 0-9-] 'означает набор« все , кроме закрытых скобок, от нуля до девяти и дефиса ». Строка заканчивается появлением символа, не входящего в (или с циркумфлексом в) наборе , или когда ширина поля заканчивается.
Итак,% [^ \ n] должен прочитать все, вплоть до возврата каретки.
fscanf
с % s
прекращает чтение, когда находит пробелы.
Поскольку вы читаете неформатированный текст, вы можете просто использовать fgets
, который читает, пока не заполнит предоставленный вами буфер, найдет новую строку ( \ n
) или достигает конца файла, в зависимости от того, что наступит раньше.
Избегайте использования scanf
. Как уже упоминалось, вместо этого следует использовать fgets
.
Если вы не хотите использовать буфер фиксированного размера и разрешать строки произвольной длины, вы можете попробовать использовать общедоступную функцию Чака Фалконера ggets
функцию . (Эта ссылка сейчас недоступна, но на archive.org есть копия .)
fscanf(file,"%50[^\n]\n",string);
Каждый символ, кроме \ n
, будет поглощен [^ \ n]
Максимум 0f 50 символов будет потребляется (убедитесь, что в строке есть место, по крайней мере, для 51)
..
\ n
", строка
это гарантирует, что \ n
также потребляется, чтобы следующий вызов не просто возвращает пустую строку.