提问者:小点点

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

这将产生一个错误。 有什么想法吗?


共3个答案

匿名用户

您必须使用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

更新

你经过编辑的问题与原文几乎没有相似之处。

您试图将getLine转换为int,而不是字符串或字符缓冲区。 流的格式化操作仅与运算符<<运算符>>一起工作。 要么使用其中一个(并相应地调整多词输入),要么使用getline并在词法上转换为int

匿名用户

标准库提供了一个名为ws的输入函数,它使用输入流中的空白。 你可以这样使用它:

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