Как в C++ ввести строу char[], содержащую пробелы?
Может кто подскажет:
Как в C++ ввести строу char[], содержащую пробелы?
#1
19:41, 26 окт 2007
#2
19:49, 26 окт 2007
#3
19:49, 26 окт 2007
уточни, что ты хочешь?
ввести строку с клавиатуры или создать строку?
#4
19:59, 26 окт 2007
Хочу, чтобы было аналогично следующему:
//.
char str[MAX_LENGTH];
//.
cin >> str;
cout Но так, что если введена строка «asd asdfs a aewt wet dsg asd», то она и должна быть выведена, а не «asd».
Как ввести строку с пробелами в c char
Сообщение от forsaken66
#include "stdafx.h" #include "iostream" #include "conio.h" #include "stdio.h" #include "string" using namespace std; char *s=""; int main () < cout
выдает ошибку при вводе строки. не пойму. нет, ясное дело можно использовать string. Но а если char *s то как организовать ввод?
читайте ошибки компилятор которые выдает
error C2661: gets: нет перегруженной функции, принимающей 2 аргументов
вот исправил чуток
#include "iostream" #include "conio.h" #include "stdio.h" #include "string" using namespace std; int main ()
Последний раз редактировалось kedbl4; 19.11.2009 в 12:15 . Причина: неправильно ввел
Как ввести в cin строки с пробелами в С++
По умолчанию cin (стандартный ввод) в С++ считывает данные до первого пробела. Рассмотрим способы, с помощью которых мы можем передать через стандартный ввод строку, содержащую один или нескольких пробелов, чтобы эта строка могла быть присвоена в качестве значения переменной в программе.
cin по умолчанию пропускает все белые пробелы (пробелы, табуляции, новые строки и т. д.). Вы можете либо изменить его поведение, либо использовать немного другой механизм.
Рассмотрим небольшую программу, которая просит пользователя ввести имя и после этого сразу же отображает введённую строку на экране. Приведённый код работает так, как ожидается, если вводимые данные не содержат пробелов:
#include using namespace std; int main() < string line; cout > line; cout
Для запуска этого кода сохраните его в файл test.cpp и скомпилируйте:
g++ test.cpp
Запуск скомпилированного файла:
./a.out
Попробуем ввести строку с пробелами:
Как можно увидеть, из введённой строки «Алексей Милосердов», сохранилось только часть до пробела, то есть «Алексей».
Чтение строки с getline
getline читает символы из входного потока и помещает их в строку — именно это нам и нужно. getline (как и использование строки), требует указать заголовок #include . Отредактируем наш код:
#include #include using namespace std; int main()
Как можно убедиться, теперь строка считалась полностью, вместе с пробелами.
Изменение поведения cin с помощью noskipws
Как мы уже выяснили, по умолчанию cin пропускает все белые пробелы (пробелы, табуляции, новые строки и т. д.). Чтобы изменить его поведение, используйте манипулятор noskipws следующим образом:
cin >> noskipws >> line;
noskipws включает пропуск начальных пробелов с помощью форматированных функций ввода (по умолчанию включено). Не влияет на вывод.
То есть noskipws не поможет нам передать через стандартный ввод строки, содержащие в себе пробелы, кроме тех случаев, когда пробелы стоят в начале строки.
Чтобы стало понятнее, рассмотрим следующий код:
#include #include using namespace std; int main() < char c1, c2, c3; istringstream("a b c") >> c1 >> c2 >> c3; cout > noskipws >> c1 >> c2 >> c3; cout
В результате работы этого кода будет выведено:
Поведение по умолчанию: c1 = a c2 = b c3 = c Поведение с noskipws: c1 = a c2 = c3 = b
Смотрите также онлайн учебник «Основы С++».
Как ввести строку с пробелами,используя scanf в Си,не используя gets?
Я использую scanf("%s",&s);
На введеную фразу например "Они учатся в школе";Переменной s присваивается "Они".
использую char *s(или S[256]).Подключаю String.h.
Как сделать,чтобы s присваивалась фраза "Они учатся в школе"?
Дополнен 14 лет назад
Может можно ввести строку другим образом?Только не на Си++,а именно на Си?
Дополнен 14 лет назад
scanf("%s\n",&s); не работает.
Лучший ответ
Есть такая идея) , но нужно знать точно количество слов и их длину.. .
char s1[10],s2[10],s3[10],s4[2]=" ";
scanf("%s %s %s",&s1,&s2,&s3);
strcat(s1,s4);
strcat(s1,s2);
strcat(s1,s4);
strcat(s1,s3);
puts(s1);
Хотя лучше всего воспользоваться gets()
Остальные ответы
Нельзя. scanf считывает только до первого пробела.
Гм, в Си кроме gets() есть ещё и getchar(), но это посимвольный ввод. Осуществить можно, но будет слишком извращённо.
Попробуй scanf("%s\n",&s);
Сканф так специально придуман, чтобы вводить строку до первого разделителя - это млжет быть пробел, табуляция, перевод строки.
scanf("%s", strana[i]);
/*ввести слова через пробелы и нажать в конце Enter: ыаыва ываыва ываыв Enter*/
/*сканф зат¤пает только одно слово до пробела, а остальные оставит в буфере stdin*/
fgets(goroda[i], MAX_LENGTH_OF_STRING, stdin);
/*эта функци¤ не будет ожидать ввода, он съест все что осталось после сканфа в stdin*/
Множество сканирования scanf
char s[100];
scanf("%[^\n]",s);// все кроме \n
printf("%s\n",s);
Вводим:
Hello world
Печатает:
Hello world