无法读取最后一行,使用 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 &gt;&gt; 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&gt;&gt;s;来读取字符串,而不是

getline(cin,s);
cin.clear();```

【讨论】:

以上是关于无法读取最后一行,使用 getline() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何强制getline()一次输入一行[重复]

混合cin和getline输入问题[重复]

使用 getline() 而不设置故障位

get()与getline()

getline c ++需要帮助[关闭]

如何从 C 中的控制台读取一行?