【问题标题】:unable to read last line, using getline() [duplicate]无法读取最后一行,使用 getline() [重复]
【发布时间】: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

你能帮我看一下最后一行吗?

【问题讨论】:

    标签: c++ string std


    【解决方案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();```
        

        【讨论】:

          猜你喜欢
          • 2021-12-05
          • 2017-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-02
          • 1970-01-01
          • 2015-07-18
          • 1970-01-01
          相关资源
          最近更新 更多