I/O Status Handling In C++

Associated with each stream is a set of flags indicating the I/O state of the stream.
 
For example, the flag ios::eofbit indicates that no more characters can be extracted from a stream, and the flag ios::failbit indicates that some previous request failed.
 
The I/O state flags can be tested by member functions; for example, cin.eof() tests whether more characters can be extracted from the standard input stream.
 
The I/O state flags can be individually manipulated by using the clear() member function; for example, cout.clear(0) clears all the I/O state flags for the stream cout.
 
For convenience, the ‘!’ operator and the conversion to void* operator allow concise testing of a stream for any error.
 
These operators allow you to use statements such as the following, which writes the results of the function nextline to the standard output stream until an error occurs:
 
while(cout)
cout << nextline();
 
Because an insertion or extraction always produces its stream argument as its result, this can be further abbreviated to the following statement:
 
while(cout << nextline());
 
This form makes it more obvious that the loop might not terminate at all. Note that attempting to extract from a stream from which no more characters can be taken is considered a failure.
 
Thus, you can use a loop such as the following to extract and process items from a stream until the stream is exhausted:
 
while(cin >> datum)
process(datum);