Mail Archives: djgpp/1997/01/26/15:15:48
From: | drathj01 AT xlab1 DOT fiu DOT edu (daniel k rathjens)
|
Newsgroups: | comp.lang.c++,comp.os.msdos.djgpp
|
Subject: | Re: EOF
|
Followup-To: | comp.lang.c++,comp.os.msdos.djgpp
|
Date: | 26 Jan 1997 08:25:58 GMT
|
Organization: | Florida International University
|
Lines: | 32
|
Message-ID: | <5cf4em$dca@isis.fiu.edu>
|
References: | <32E6383C DOT 750D AT cu DOT lu>
|
NNTP-Posting-Host: | xlab1.fiu.edu
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
I had the same problem a few days ago. The part I missed at first was
the same thing I think you have. When the attempt is made to read the
^Z a few things happen: an error flag is turned on and cin goes into
a failed state, the loop is skipped, and the value of i is _not_ changed
i not being changed means that the ^Z is still sitting there in the
stream since it hasn't been read yet. and using the clear() function
does not clear the stream as it's name would imply, it simply puts
the stream back into a non-failed state. So, when you call cin >> d;
now it attempts to read that ^Z again, and goes back into a failed
state again because it's not a double, so you're still left with the
^Z in the stream. Then your output of d is unpredictable because
nothing has been read into it. The solution is to add
: #include <iostream.h>
: int main() {
: int i;
: while(cin >> i) cout << i << endl; // CTRL Z to stop the loop
: cin.clear(); // reset the flags
char ch;
cin.get(ch);
: double d;
: cin >> d; // with DJGPP gcc, the user cannot
: enter a value
: cout << d << endl;
: }
Which brings us to my question. Is there a better way to empty the
stream than: while(cin.get(ch) { }?
--
#include <disclaimer.h> #include <humorous_quote.h>
void main(geek *code) { // pointer points to: Danny Rathjens
GCS/M/S d+(-) s+:- a-- C+++>$ ULSC++>+++$ P+? L++ E W++(+) N+++ o K w++
!O !M- V- PS PE+ Y-- PGP- t++@ !5 X+ R+ tv b+++ DI+ D+ G++ e+ h r y? }
- Raw text -