无法读取最后一行,使用 getline() [重复]
Posted
技术标签:
【中文标题】无法读取最后一行,使用 getline() [重复]【英文标题】:unable to read last line, using getline() [duplicate] 【发布时间】:2021-07-11 12:57:39 【问题描述】:我必须如下阅读测试演员表。
3
ababa
abc
babac
c++ 代码读取上述输入。
int main()
int t;
cin>>t;
while(t--)
string s;
getline(cin,s);
cin.clear();
cout<<s<<endl;
return 0;
但我得到的输出是
ababa
abc
你能帮我看一下最后一行吗?
【问题讨论】:
【参考方案1】:当你这样做时
cin >> t;
用于结束输入的 Enter 键作为换行符留在输入缓冲区中。第一次调用getline
时,此换行符将被读取为“空”行。
一个简单的解决方案是ignore得到t
的输入后剩余的输入:
cin >> t;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
我还建议您使用流的状态作为循环条件的一部分:
string s;
while (t-- && getline(cin, s))
cout << s << '\n';
这样您就不会尝试读取超出输入末尾的内容。
【讨论】:
【参考方案2】:为什么不直接使用cin >> s;
,除非字符串中有多个单词
#include <iostream>
using namespace std;
int main()
int t;
cin >> t;
while (t--)
string s;
cin >> s;
cout << s << endl;
return 0;
【讨论】:
【参考方案3】:要读取最后一行,可以使用cin>>s;
来读取字符串,而不是
getline(cin,s);
cin.clear();```
【讨论】:
以上是关于无法读取最后一行,使用 getline() [重复]的主要内容,如果未能解决你的问题,请参考以下文章