Keyboard input/Flush the keyboard buffer: Difference between revisions
Content added Content deleted
Line 808: | Line 808: | ||
=={{header|C}}== |
=={{header|C}}== |
||
===Simple solution for stdin=== |
===Simple solution for stdin=== |
||
<lang|c>#include <stdio.h> |
|||
#include <stdlib.h> |
|||
int main(int argc, char* argv[]) |
|||
{ |
|||
// Get a chance to make stdin input buffer dirty. |
|||
// |
|||
char text[256]; |
|||
getchar(); |
|||
// This DOES NOT WORK properly on all modern systems including Linux & W10. |
|||
// Obsolete, don't use this. BTW, there is no fpurge in MSVC libs in 2020. |
|||
// |
|||
fflush(stdin); |
|||
// Always works. The only difference is (?) that readed characters may |
|||
// remain somethere in RAM. |
|||
// |
|||
fseek(stdin, 0, SEEK_END); |
|||
// BTW, a very dirty solution is below - an unbuffered stream does not need |
|||
// any flushing etc. It should be safe - i.e. if called before any I/O then |
|||
// no trace of buffered characters remain in RAM. Use with care. |
|||
// |
|||
setvbuf(stdin, NULL, _IONBF, 0); |
|||
// Now we are able to check if the buffer is really empty. |
|||
// BTW, NEVER use gets due to possible the buffer overrun. |
|||
// |
|||
fgets(text, sizeof(text), stdin); |
|||
puts(text); |
|||
return EXIT_SUCCESS; |
|||
}</lang> |
|||
===POSIX=== |
===POSIX=== |
||
{{libheader|POSIX}} |
{{libheader|POSIX}} |