Search code examples
c++stringinputstreamistream

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


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

I want to know when I reach the space between 4 and 5. I tried reading as char and using .peek() to detect \n but this detects the \n that goes after number 1 . The translation of the above input is: 1\n2\n3\n4\n\n5\n if I'm correct...

Since I'm going to manipulate the ints I rather read them as ints than using getline and then converting to int...


Solution

  • 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.