Flushing an input stream

G

Guest

Hi,

I've recently replaced a lot of uses of cin>> with cin.get and the
like, and I'd like to know if someone can answer a question that was
preying on my mind before I did so. I had previously handled the
problem of the program going beserk when a string with a space, (or
the wrong kind of data, or too much data) was entered by using
fflush(stdin). Although this worked in Borland C++, I have been told
it doesn't usually. Is this correct, and if so, how can I flush the
junk from the input stream?

Thanks,

James McLaughlin.
 
A

Alex Vinokur

Hi,

I've recently replaced a lot of uses of cin>> with cin.get and the
like, and I'd like to know if someone can answer a question that was
preying on my mind before I did so. I had previously handled the
problem of the program going beserk when a string with a space, (or
the wrong kind of data, or too much data) was entered by using
fflush(stdin). Although this worked in Borland C++, I have been told
it doesn't usually. Is this correct, and if so, how can I flush the
junk from the input stream?

Thanks,

James McLaughlin.


<QUOTE from "comp.lang.c Answers (Abridged) to Frequently Asked Questions (FAQ)"
at http://groups.google.com/[email protected] >

12.26a: Will fflush(stdin) flush unread characters from the standard
input stream?

A: No.

12.26b: If fflush() won't work, what can I use to flush input?

A: It depends on what you're trying to do; see the full list for
details. (But first see question 12.20.)

</QUOTE>


<QUOTE from "comp.lang.c Answers to Frequently Asked Questions (FAQ List)"
at http://groups.google.com/[email protected] >

12.26a: How can I flush pending input so that a user's typeahead isn't
read at the next prompt? Will fflush(stdin) work?

A: fflush() is defined only for output streams. Since its
definition of "flush" is to complete the writing of buffered
characters (not to discard them), discarding unread input would
not be an analogous meaning for fflush on input streams.
See also question 12.26b.

References: ISO Sec. 7.9.5.2; H&S Sec. 15.2.

12.26b: If fflush() won't work, what can I use to flush input?

A: It depends on what you're trying to do. If you're trying to get
rid of an unread newline or other unexpected input after calling
scanf() (see questions 12.18a-12.19), you really need to rewrite
or replace the call to scanf() (see question 12.20).
Alternatively, you can consume the rest of a partially-read line
with a simple code fragment like

while((c = getchar()) != '\n' && c != EOF)
/* discard */ ;

(You may also be able to use the curses flushinp() function.)

There is no standard way to discard unread characters from a
stdio input stream, nor would such a way necessarily be
sufficient, since unread characters can also accumulate in
other, OS-level input buffers. If you're trying to actively
discard typed-ahead input (perhaps in anticipation of issuing a
critical prompt), you'll have to use a system-specific
technique; see questions 19.1 and 19.2.

References: ISO Sec. 7.9.5.2; H&S Sec. 15.2.

</QUOTE>


System-specific technique for UNIX is to use tcflush - flush non-transmitted output data, non-read input data or both.
See http://www.cs.queensu.ca/cgi-bin/local/man.cgi?section=3C&topic=tcflush.

Samples can be seen at:
http://groups.google.com/[email protected]
http://alexvn.freeservers.com/s1/download.html (Flushing non-read input data with using tcflush)
 
Joined
Jan 9, 2008
Messages
2
Reaction score
0
Flush Cin works for what I need it for

this seems to be working for me in linux right now...
void flush()
{
char nextChar;
while( nextChar != '\n' && nextChar != EOF)
{nextChar = cin.get();}
}
 
Joined
Jan 9, 2008
Messages
2
Reaction score
0
when

you just have to place the call to the function so it doesn't prompt for input... not very hard just play around with it....
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top