无法读取最后一行,使用 getline()
unable to read last line, using getline()
我必须阅读以下测试演员表。
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
你能帮我看看最后一行怎么读吗?
为什么不简单地使用 cin >> s;
除非字符串中有多个单词
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
string s;
cin >> s;
cout << s << endl;
}
return 0;
}
要读取最后一行,您可以使用 cin>>s;
来读取字符串而不是
getline(cin,s);
cin.clear();```
当你这样做时
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';
}
这样您就不会尝试读取超出输入末尾的内容。
我必须阅读以下测试演员表。
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
你能帮我看看最后一行怎么读吗?
为什么不简单地使用 cin >> s;
除非字符串中有多个单词
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
string s;
cin >> s;
cout << s << endl;
}
return 0;
}
要读取最后一行,您可以使用 cin>>s;
来读取字符串而不是
getline(cin,s);
cin.clear();```
当你这样做时
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';
}
这样您就不会尝试读取超出输入末尾的内容。