C Interview Questions and Answers

 

If fflush wont work, what can I use to flush input?

If fflush wont work, what can I use to flush input?





C Interview Questions and Answers





(Continued from previous question...)





If fflush wont work, what can I use to flush input?





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 you really need
to rewrite or replace the call to scanf. 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.
Some vendors do implement fflush so that fflush(stdin) discards unread characters,
although portable programs cannot depend on this. (Some versions of the stdio library
implement fpurge or fabort calls which do the same thing, but these aren't
standard, either.) Note, too, that flushing stdio input buffers is not necessarily
sufficient: unread characters can also accumulate in other, OS-level input buffers.
If you're trying to actively discard input (perhaps in anticipation of issuing
an unexpected prompt to confirm a destructive action, for which an accidentally-typed
``y'' could be disastrous), you'll have to use a system-specific
technique to detect the presence of typed-ahead input; Keep in mind that users can
become frustrated if you discard input that happened to be typed too quickly.

Posted by:Richards