这是代码:
string str;
cin>>str;
cout<<"first input:"<<str<<endl;
getline(cin, str);
cout<<"line input:"<<str<<endl;
结果是 getline 永远不会暂停以等待用户输入,因此第二个输出始终为空。
花了一些时间后,我意识到在第一次调用“cin>>str”后,似乎“\n”仍然存储在cin中(使用cin.peek()来检查),这立即结束了getline。解决方案将在第一次用法和第二次用法之间添加一行:cin.ignore(numeric_limits::max(), '\n');
但是,我仍然不明白,为什么第一次调用后会留下 '\n' ? istream&operator>> 的真正作用是什么?
The \n
按照方式留在输入流中operator>>
定义为std::string
. The std::string
用输入流中的字符填充,直到找到空白字符(在本例中\n
),此时填充停止,空白现在是输入流中的下一个字符。
您还可以删除\n
通过致电cin.get()
之后立马cin>>str
。然而,有很多很多不同的方法可以对这个特定的 I/O cat 进行剥皮。 (也许这本身就是一个好问题?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)