Is there any other method to clear the input buffer in c withut using
fflush();
or
while(getchar()!='\n');
Because i have read it everywhere and cant find any other way to do it.
Is there any other method to clear the input buffer in c withut using
fflush();
or
while(getchar()!='\n');
Because i have read it everywhere and cant find any other way to do it.
The best solution is to not depend on the input buffer's state so much.
Read input as whole lines, using fgets()
, then parse those. Don't use e.g. scanf()
to read individual values, since it interacts with the buffer in annoying ways.
Using fgets()
as suggester @unwind best approach.
To flush to the end of the line.
void FlushStdin(void) {
int ch;
while(((ch = getchar()) !='\n') && (ch != EOF));
}
If stdin
is all ready flushed to the end-of-line, calling FlushStdin()
or other posted scanf()
, fgetc()
solutions, will flush to the end of the next line.
Note scanf("%*[^\n]%*1[\n]");
does not work if the next char
is '\n'
.
Another method to clear the input buffer(stdin
) would be to use
scanf("%*[^\n]%*1[\n]");
Here,%*[^\n]
instructs scanf
to scan everything until a new-line character(\n
) is found and then discard it.The %1*[\n]
tells scanf
to scan 1 character including a \n
character and discard it also.