使用cin两次的问题

gc *_*c . 8 c++ cin

这是代码:

string str;
cin>>str;
cout<<"first input:"<<str<<endl;
getline(cin, str);
cout<<"line input:"<<str<<endl;
Run Code Online (Sandbox Code Playgroud)

结果是getline从不暂停用户输入,因此第二个输出始终为空.

在花了一些时间之后,我意识到在第一次调用"cin >> str"之后,似乎'\n'仍然存储在cin中(使用cin.peek()来检查),它立即结束了getline.解决方案是在第一次使用和第二次使用之间再添加一行: cin.ignore(numeric_limits::max(), '\n');

但是,我仍然不明白,为什么在第一次通话后'\n'留在那里?什么是梦想和运营商>>真的吗?

fbr*_*eto 7

按照定义\n的方式operator>>将其保留在输入流中std::string.将std::string填充有从输入流字符,直到一个空白字符被找到(在这种情况下\n),在该点处填充停止现在的空白是在输入流中的下一个字符.

您也可以删除\n通过调用cin.get()之后cin>>str.然而,有许多不同的方法可以为这个特定的I/O猫提供皮肤.(也许这本身就是个好问题?)

  • 摆脱尾随空格字符的更好方法可能是`std :: cin >> str >> std :: ws;`. (5认同)