Std:: cin input с пробелами?

#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);

Это приводит к ошибке. Есть идеи?

Ответ 1

Вы должны использовать cin.getline():

char input[100];
cin.getline(input,sizeof(input));

Ответ 2

Он не "терпит неудачу"; он просто перестает читать. Он видит лексический токен как "строку".

Используйте 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 << " favourite movie is " << title;
}

Обратите внимание, что это не то же самое, что std::istream::getline, которое работает с буферами char C-style, а не std::string s.

Обновление

Ваш отредактированный вопрос мало похож на оригинал.

Вы пытались getline в int, а не в строке или символьном буфере. Операции форматирования потоков работают только с operator<< и operator>>. Либо используйте один из них (и соответственно настройте для ввода нескольких слов), либо используйте getline и лексически конвертируйте в int после факта.

Ответ 3

Использование:

getline(cin, input);

эту функцию можно найти в

#include <string>

Ответ 4

Стандартная библиотека предоставляет функцию ввода, называемую ws, которая потребляет пробелы из входного потока. Вы можете использовать его следующим образом:

std::string s;
std::getline(std::cin >> std::ws, s);

Ответ 5

Вы хотите использовать функцию .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 << " favourite movie is " << title;

  return 0;
}

Взял пример из здесь. Проверьте его для получения дополнительной информации и примеров.

Ответ 6

C WAY

Вы можете использовать функцию gets, найденную в cstdio (stdio.h в c):

#include<cstdio>
int main(){

char name[256];
gets(name); // for input
puts(name);// for printing 
}

С++ WAY

gets удаляется в С++ 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
}

Ответ 7

Это старый вопрос, но может кто-нибудь сказать мне, если мое решение неверно:

std::string s, temp;
std::stringstream ss;
while(std::cin>>temp){
    ss<<temp;
    ss<<" ";
}
s = ss.str();

Ответ 8

Пример программы (из cpp.sh) делает именно это:

#include <iostream>
#include <string>

int main()
{
  std::string name;
  std::cout << "What is your name? ";
  getline(std::cin, name);
  std::cout << "Hello, " << name << "!\n";
}

Ответ 9

int main(){
char name[20];
gets(name);
}

use gets() принимает строку (массив char в C) с пробелами.