[Bug libstdc++/6896] ofstream, ^D and flushing

jlquinn at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri Jun 20 05:27:00 GMT 2003


PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=6896


jlquinn at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID


------- Additional Comments From jlquinn at gcc dot gnu dot org  2003-06-20 05:27 -------
The output from 3.1.1 is correct.

Starting from output of "Enter line 1 of 3:", this is output to cout.
Next, cin.getline() is called.  This calls istream::sentry, which flushes cout.

cin.getline() reads a ^D, which sets eof.  It also sets failbit, since no input
was read.

Now, a newline is written and flushed to output (buff is empty).
Next, cerr << "cin state:" ... is written and flushed by the endl.  Note that no
newline has been output.  The second cerr output then happens.

Next is cout << "Enter line 2 of 3:".  There is no endl to flush, so the output
accumulates in stdout's buffer.

The second cin.getline() does nothing because the sentry quits due to good() not
being true.

As above, a newline is written to output and flushed, and two lines are written
to cerr and flushed.

The third cin.getline() does nothing like the second one.  And again, this is
followed by a newline being written to output and flushed, and two lines written
to cerr and flushed.

Finally, as the program terminates, cout is flushed, and we see the second and
third "Enter line x of 3:".



More information about the Gcc-bugs mailing list