How to detect empty lines while reading from istream object in C++?

前端 未结 2 1978
时光取名叫无心
时光取名叫无心 2020-12-29 10:15

How can I detect if a line is empty?

I have:

1
2
3
4

5

I\'m reading this with istream r so:

int n;
r >> n


        
相关标签:
2条回答
  • 2020-12-29 10:58

    If you really don't want using getline, this code works.

    #include <iostream>
    using namespace std;
    
    
    int main()
    {
        int x;
        while (!cin.eof())
        {
            cin >> x;
            cout << "Number: " << x << endl;
    
            char c1 = cin.get();
            char c2 = cin.peek();
    
            if (c2 == '\n')
            {
                cout << "There is a line" << endl;
            }
        }
    }
    

    But be aware that this is not portable. When you using system that has different end lines characters than '\n' then would be problem. Consider reading whole lines and then extract data from it.

    0 讨论(0)
  • 2020-12-29 11:01

    It could look like this:

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int main()
    {
        istringstream is("1\n2\n3\n4\n\n5\n");
        string s;
        while (getline(is, s))
        {
            if (s.empty())
            {
                cout << "Empty line." << endl;
            }
            else
            {
                istringstream tmp(s);
                int n;
                tmp >> n;
                cout << n << ' ';
            }
        }
        cout << "Done." << endl;
        return 0;
    }
    

    output:

    1 2 3 4 Empty line.
    5 Done.
    

    Hope this helps.

    0 讨论(0)
提交回复
热议问题