Ввод std::cin с пробелами?
#include <string>
std::string input;
std::cin >> input;
Пользователь хочет ввести "Hello World". Но cin
терпит неудачу в промежутке между двумя словами. Как я могу сделать cin
взять в целом Hello World
?
Я на самом деле делаю это со структурами и cin.getline
не похоже на работу. Вот мой код:
struct cd
{
std::string CDTitle[50];
std::string Artist[50];
int number_of_songs[50];
};
std::cin.getline(library.number_of_songs[libNumber], 250);
Это приводит к ошибке. Есть идеи?
7 ответов
Вы должны использовать cin.getline()
:
char input[100];
cin.getline(input,sizeof(input));
Это не "провал"; это просто перестает читать. Он видит лексический токен как "строку".
использование std::getline
:
int main()
{
std::string name, title;
std::cout << "Enter your name: ";
std::getline(std::cin, name);
std::cout << "Enter your favourite movie: ";
std::getline(std::cin, title);
std::cout << name << "'s favourite movie is " << title;
}
Обратите внимание, что это не то же самое, что std::istream::getline
, который работает с C-стилем char
буферы, а не std::string
s.
Обновить
Ваш отредактированный вопрос мало похож на оригинал.
Вы пытались getline
в int
, а не строковый или символьный буфер. Операции форматирования потоков работают только с operator<<
а также operator>>
, Либо используйте один из них (и соответственно измените для ввода нескольких слов), либо используйте getline
и лексически преобразовать в int
после того, как-фактум.
Стандартная библиотека предоставляет функцию ввода, называемую ws
, который потребляет пробелы из входного потока. Вы можете использовать это так:
std::string s;
std::getline(std::cin >> std::ws, s);
Используйте:
getline(cin, input);
функция может быть найдена в
#include <string>
Вы хотите использовать функцию.getline в cin.
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your favourite movie: ";
cin.getline (title,256);
cout << name << "'s favourite movie is " << title;
return 0;
}
Взял пример отсюда. Проверьте это для получения дополнительной информации и примеров.
Как мне прочитать строку из ввода?
Вы можете прочитать одно слово, завершенное пробелом, с помощью
std::cin
как это:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a word:\n";
string s;
cin>>s;
cout << "You entered " << s << '\n';
}
Обратите внимание, что нет явного управления памятью и буфера фиксированного размера, который может быть переполнен. Если вам действительно нужна целая строка (а не одно слово), вы можете сделать это:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "Please enter a line:\n";
string s;
getline(cin,s);
cout << "You entered " << s << '\n';
}
ПУТЬ С
Ты можешь использовать gets
Функция найдена в cstdio(stdio.h в c):
#include<cstdio>
int main(){
char name[256];
gets(name); // for input
puts(name);// for printing
}
ПУТЬ С ++
gets
удаляется в C++ 11.
[Рекомендуется]: Вы можете использовать getline(cin,name), который находится в string.h
или cin.getline(name,256), который находится в iostream
сам.
#include<iostream>
#include<string>
using namespace std;
int main(){
char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
Я предпочитаю использовать следующий метод для ввода данных:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
string name;
cout << "Hello, Input your name please: ";
getline(cin, name);
return 0;
}
На самом деле это очень просто использовать, а не определять общую длину массива для строки, содержащей символ пробела.
Это старый вопрос, но кто-то может сказать мне, если мое решение неверно:
std::string s, temp;
std::stringstream ss;
while(std::cin>>temp){
ss<<temp;
ss<<" ";
}
s = ss.str();