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

这会产生错误。有任何想法吗?

4

8 回答 8

267

它不会“失败”;它只是停止阅读。它将词汇标记视为“字符串”。

使用std::getline

#include <string>
#include <iostream>

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::strings。

更新

您编辑的问题与原始问题几乎没有相似之处。

您试图getline进入int,而不是字符串或字符缓冲区。流的格式化操作仅适用于operator<<and operator>>。要么使用其中一个(并针对多词输入进行相应调整),要么使用getline并在词法上转换为int事后。

于 2011-04-30T01:13:27.830 回答
124

你必须使用cin.getline()

char input[100];
cin.getline(input,sizeof(input));
于 2011-04-30T00:52:02.993 回答
66

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

std::string s;
std::getline(std::cin >> std::ws, s);
于 2017-05-08T10:58:25.587 回答
32

采用 :

getline(cin, input);

该功能可以在

#include <string>
于 2014-10-16T14:34:56.177 回答
15

您想在 cin 中使用 .getline 函数。

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

以here为例。查看它以获取更多信息和示例。

于 2011-04-30T00:52:38.963 回答
5

C方式

您可以使用getscstdio(stdio.h in c) 中的函数:

#include<cstdio>
int main(){

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

C++ 方式

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
}
于 2015-07-09T05:32:24.810 回答
5

如何从输入中读取字符串?

您可以像这样读取单个以空格结尾的单词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';
}
于 2020-10-09T15:11:45.230 回答
2

我宁愿使用以下方法来获取输入:

#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string name;

    cout << "Hello, Input your name please: ";
    getline(cin, name);

    return 0;
}

它实际上超级容易使用,而不是为包含空格字符的字符串定义数组的总长度。

于 2020-04-12T03:18:29.067 回答