简单回答:
getline:顾名思义,获取遇到“\n”换行符之前的所有内容。在这里,输入始终被视为字符串。
因此,如果您编写:
string someStr;
getline(cin, someStr); //here if you enter 55, it will be considered as someStr="55";
">>"(按位右移运算符):既聪明又愚蠢。
它可以接收您定义的任何基本数据类型的输入,但会在遇到第一个非数据类型字符时停止。
例如:
int someInt;
std::cin >> someInt; //here if you enter "55some", >> will only consider someInt=55;
因此,如果你写:
string someStr;
cin >> someStr;
在这里,如果你输入"I am Batman",cin会理解"I"是一个字符串,但是空格不是,所以它会停在"I",你将得到someStr="I"。
重要提示:
如果你连续使用>>和getline,你会遇到问题。
对于>>,即使"\n"(换行符)也不是数据类型。
因此,如果你写成:
int someStr, someStr2;
std::cin >> someStr; //here you enter "Batman"
getline(cin, someStr2); //here you enter "Bruce"
由于 >> 不识别 "\n" 字符,它只能看到 "Batman" 并退出缓冲区,留下 "\n" 给 someStr2。 因此,someStr2 将得不到 "Bruce",而是得到 ""(换行符)。