scanf ("% s", str) этого не сделает. Он перестанет читать в первом пространстве. gets (str) не работает ни при большой строке. Есть идеи?Как я могу прочитать строку с пробелами в C?
ответ
fgets с STDIN в качестве потока файлов. Затем вы можете указать количество данных, которое вы хотите прочитать, и куда их поместить.
Когда вы хотите прекратить чтение? В EOF, у определенного персонажа или что?
Вы можете прочитать определенное количество символов с% с
гр Соответствует последовательности символов ширины количества (по умолчанию 1); следующий указатель должен быть указателем на символ, и должно быть достаточно места для всех символов (не добавляется завершающий NUL). Обычный пропущен ведущий белый пробел. Чтобы пропустить пробел , сначала используйте явное пространство в формате.
Вы можете прочитать определенные символы (или до исключенных из них) с% [
[Соответствует последовательности непустой символов из заданного набора принятых символов; следующий указатель должен быть указателем на char, и должно быть достаточно места для всех символов в строке , плюс завершающий символ NUL. Обычный пропуск ведущего белый пространство подавлено. Строка должна состоять из символов в (или нет) конкретного набора; набор определяется символами между открытой скобой [символ и закрывающая скобка] charac- ter. Набор исключает эти символы, если первый символ после того, как открытая скобка представляет собой огибающую ^. Чтобы включить в комплект кронштейн , сделайте его первым символом после открытого кронштейна или обводки; любая другая позиция закончит набор. Символ дефиса - также особенный; при размещении между двумя другими символами он добавляет все входящие символы в набор. Чтобы включить дефис, сделайте его последним символом перед окончательным скобкой . Например, `[^] 0-9-] 'означает набор ` `все за исключением закрывающей скобки, от нуля до девяти и дефиса' '. строка заканчивается с появлением символа не в (или, с кружочками cumflex, в) установить или когда ширину поля
Создайте свою собственную функцию для чтения строки. Вот то, что вы в основном должны сделать:
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
Чтобы прочитать строку с пространством вы можете сделать следующее:
char name[30],ch;
i=1;
while((ch=getchar())!='\n')
{
name[i]=ch;
i++;
}
i++;
name[i]='\n';
printf("String is %s",name);
'ch' должно быть' int', чтобы отличить 'EOF' от всех остальных' char'. Как и сейчас, 'while ((ch = getchar())! = '\ N')' является бесконечным циклом, если 'EOF' должен быть возвращен из' getchar() '. – chux
char str[100];
Попробуйте
scanf("%[^\n]s",str);
или это
fgets(str, sizeof str, stdin))
1) Нет '' '' ''% [^ \ n] s "'. 2) 'scanf ("% [^ \ n] ... 'ничего не скажет и ничего не сохранит в' str', если вход '' \ n "'. 3) 'scanf ("% [^ \ n] .. . 'не защищает от большого ввода. 4)' scanf ("% [^ \ n] ...' оставляет '' \ n'' в 'stdin'. – chux
- 1. Как читать строку, разделенную пробелами в C++?
- 2. Как я могу прочитать определенную строку из файла в C?
- 3. C++ IStream - как читать строку с пробелами
- 4. Как я могу прочитать строку из данных в C#?
- 5. Как я могу прочитать двоичную строку в C#?
- 6. Как я могу прочитать строку greyimage by line opencv C++
- 7. Как я могу прочитать последнюю строку файла
- 8. Как я могу прочитать следующую строку DataGridView?
- 9. Разбиваем строку пробелами в C++
- 10. Как я могу прочитать конкретную строку (строку) (позицию) из TextFile?
- 11. Как я могу изменить эту строку, поэтому я буду загружать файлы с пробелами в имени
- 12. Как читать строку с пробелами в Java
- 13. C - Как читать строку с пробелами с помощью scanf
- 14. Как я могу разделить строку пробелами, если внутри одной строки?
- 15. Как читать полную строку текста в C с пробелами
- 16. Как разделить строку пробелами в C#?
- 17. Как я могу прочитать строку в строке в Common Lisp?
- 18. Как я могу прочитать каждую строку файла xls с приостановкой
- 19. С помощью streamreader я могу прочитать следующую строку слов, но могу ли я прочитать предыдущую?
- 20. Как я могу прочитать ячейку в excel с C#?
- 21. Как я могу прочитать случайную строку из ноты в LSL?
- 22. Как я могу прочитать строку чисел из файла в список?
- 23. Как я могу прочитать целую строку ввода в Assembly?
- 24. Как я могу прочитать следующую строку в цикле for? Python
- 25. Как конкатенировать строку с пробелами?
- 26. Как я могу прочитать PTX?
- 27. Как я могу прочитать XML
- 28. Как я могу зашифровать строку в C#?
- 29. Как я могу прочитать строку из класса Java?
- 30. Как я могу сортировать строку в C#?
'gets' никогда не работает. Это неотъемлемая ошибка при использовании 'gets'. Используйте 'fgets'. –
Может быть, это моя версия c, которая не будет приниматься вообще ... Спасибо! – Johny
@Johnny: Предупреждение R от использования 'gets()' связано с тем, что с его использованием в вашем коде обнаружено * огромное * отверстие безопасности, а не то, что у вашего конкретного компилятора есть проблема с ним (он не должен: 'получает() 'является частью C с самого начала). Он устарел от C99 и больше не должен использоваться. –