Как я могу прочитать строку с пробелами в ней в C? - PullRequest
5 голосов
/ 26 октября 2010

scanf ("% s", str) не будет этого делать.Это прекратит читать в первом месте.get (str) тоже не работает, когда строка большая.Есть идеи?

Ответы [ 5 ]

13 голосов
/ 26 октября 2010

используйте fgets с STDIN в качестве потока файлов. Затем вы можете указать количество данных, которые вы хотите прочитать и где их разместить.

3 голосов
/ 25 января 2013
char str[100];

Попробуйте это

 scanf("%[^\n]s",str);

или это

fgets(str, sizeof str, stdin))
2 голосов
/ 26 октября 2010

Создайте свою собственную функцию для чтения строки.Вот что вам в основном нужно сделать:

1. fgets into allocated (growable) memory
2. if it was a full line you're done
3. grow the array
4. fgets more characters into the newly allocated memory
5. goto 2.

Реализация может быть немного хитрой: -)

Вам нужно подумать о том, что вам нужно передать своей функции (в самомнаименьший адрес массива и его размер);и что возвращает функция, когда все «работает» или когда возникает ошибка.Вам необходимо решить, что является ошибкой (строка длиной 10 Гбайт без ошибки '\ n'?).Вам нужно решить, как вырастить массив.


Редактировать

На самом деле может быть лучше fgetc, чем fgets

get a character
it it EOF? DONE
add to array (update length), possible growing it (update size)
is it '\n'? DONE
repeat
1 голос
/ 25 января 2013

Чтобы прочитать строку с пробелом, вы можете сделать следующее:

char name[30],ch;

i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
1 голос
/ 26 октября 2010

Когда вы хотите прекратить чтение?На EOF, на определенный символ или что?

Вы можете прочитать определенное количество символов с% c

c Соответствует последовательности символов счетчика ширины (по умолчанию 1);следующий указатель должен быть указателем на символ, и должно быть достаточно места для всех символов (завершающий NUL не добавляется).Обычный пропуск ведущих пробелов подавляется.Чтобы сначала пропустить пробел, используйте явный пробел в формате.

Вы можете читать определенные символы (или вплоть до исключенных) с помощью% [

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

...