这是代码:
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'留在那里?什么是梦想和运营商>>真的吗?
按照定义\n的方式operator>>将其保留在输入流中std::string.将std::string填充有从输入流字符,直到一个空白字符被找到(在这种情况下\n),在该点处填充停止现在的空白是在输入流中的下一个字符.
您也可以删除\n通过调用cin.get()之后cin>>str.然而,有许多不同的方法可以为这个特定的I/O猫提供皮肤.(也许这本身就是个好问题?)
| 归档时间: |
|
| 查看次数: |
7485 次 |
| 最近记录: |