getline(cin,aString)在没有其他输入的情况下接收输入

Sha*_*Hsu 6 c++ string cin getline

我的代码看起来像这样,

string aString;
cin >> aString;
cout << "This is what cin gets:" << aString << endl;
getline(cin, aString);
cout << "This is what getline(cin, <string>) gets:" << aString << endl;
Run Code Online (Sandbox Code Playgroud)

每次我运行它,我给输入,如"12",我得到"12"和"".

我想知道为什么getline会在没有用户输入的情况下收到.

我能理解当我输入类似"12 24"的东西时,cin会得到"12",而getline应该得到其余的东西.(另外,如果一个人可以回答,其间的空间被视为cin的结尾,那么为什么它被传递给getline?)

刚开始使用C++上的字符串,所以请不要太难.谢谢.

tem*_*def 12

当您将标准流提取与getline混合时,有时候getline会返回空字符串.这样做的原因是,如果您使用>>读取输入,则用户输入的用于表示它们已完成的换行符不会从输入流中删除.因此,当您调用getline时,该函数将读取剩余的换行符并移回空字符串.

要解决此问题,要么始终使用getline作为输入,要么在读取后使用ws流操纵器提取额外的空格:

cin >> value >> ws;
Run Code Online (Sandbox Code Playgroud)

这会占用新线,解决问题.

希望这可以帮助!


111*_*111 7

这就是我得到的:

std::string str;
std::cin >> str;  //hello world
std::cout << str;  //hello
Run Code Online (Sandbox Code Playgroud)

这是因为流操作符在空白区域上进行标记

std::string str;
std::getline(std::cin, str);  //hello world
std::cout << str;  //hello world
Run Code Online (Sandbox Code Playgroud)

你得到整行,getline()一直工作,直到找到第一行结束并将该值作为字符串返回.

但是,在标记化时,如果流中还有字符(例如'\n'),那么在调用getline时将访问这些字符,您将需要清除该流.

std::cin.ignore();
Run Code Online (Sandbox Code Playgroud)