Ввод 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();
Другие вопросы по тегам