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 : 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 #include 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? }