无法读取最后一行,使用 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';
}

这样您就不会尝试读取超出输入末尾的内容。