Checking end of file inside a loop condition bad practice
suggest changeeof
returns true
only after reading the end of file. It does NOT indicate that the next read will be the end of stream.
while (!f.eof())
{
// Everything is OK
f >> buffer;
// What if *only* now the eof / fail bit is set?
/* Use `buffer` */
}
You could correctly write:
while (!f.eof())
{
f >> buffer >> std::ws;
if (f.fail())
break;
/* Use `buffer` */
}
but
while (f >> buffer)
{
/* Use `buffer` */
}
is simpler and less error prone.
Further references:
std::ws
: discards leading whitespace from an input streamstd::basic_ios::fail
: returnstrue
if an error has occurred on the associated stream
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents