ввод std :: cin с пробелами? - PullRequest
       0

ввод std :: cin с пробелами?

121 голосов
/ 30 апреля 2011
#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);

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

Ответы [ 6 ]

184 голосов
/ 30 апреля 2011

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

Использование 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, которое работает с буферами char в стиле C, а не std::string s.

Обновление

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

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

89 голосов
/ 30 апреля 2011

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

char input[100];
cin.getline(input,sizeof(input));
23 голосов
/ 16 октября 2014

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

getline(cin, input);

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

#include <string>
17 голосов
/ 08 мая 2017

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

std::string s;
std::getline(std::cin >> std::ws, s);
11 голосов
/ 30 апреля 2011

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

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

4 голосов
/ 09 июля 2015

ПУТЬ C

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

#include<cstdio>
int main(){

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

C ++WAY

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
}
...