【发布时间】:2010-03-26 17:30:11
【问题描述】:
代码如下:
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>> 到底是做什么的?
【问题讨论】:
-
更多挖掘揭示了描述的微妙之处:“当 next 字符是有效的空格或空字符,或者 End-Of-文件已到达。”