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)
这会占用新线,解决问题.
希望这可以帮助!
这就是我得到的:
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)