checking for eof in string::getline

assassin picture assassin · Feb 12, 2010 · Viewed 94.3k times · Source

How do I check for end-of-file using the std::getline function? If I use eof() it won't signal eof until I attempt to read beyond end-of-file.

Answer

AProgrammer picture AProgrammer · Feb 12, 2010

The canonical reading loop in C++ is:

while (getline(cin, str)) {

}

if (cin.bad()) {
    // IO error
} else if (!cin.eof()) {
    // format error (not possible with getline but possible with operator>>)
} else {
    // format error (not possible with getline but possible with operator>>)
    // or end of file (can't make the difference)
}