带空格的 cin 输入?

#include <string>


std::string input;
std::cin >> input;

用户想要输入“ Hello World”。但是 cin在这两个单词之间的空白处失败了。我怎样才能使 cin吸收整个 Hello World

我实际上是用 structs 做这件事,而 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);

这会产生一个错误,有什么办法吗?

699611 次浏览

你必须使用cin.getline():

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

你想在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;
}

在这里为例。查看更多信息和示例。

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

使用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缓冲区,而不是__abc2。

更新

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

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

使用:

getline(cin, input);

函数可以在

#include <string>

c方式

你可以使用cstdio中的gets函数(c中的stdio.h):

#include<cstdio>
int main(){


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

c++的方式

gets在c++11中被移除。

[推荐]:你可以使用string.h中的getline (cin、名称)cin.getline(名字,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
}

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

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

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

#include <iostream>
#include <string>


using namespace std;


int main(void) {
string name;


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


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