Replacement of fflush(stdin)

I have the below code,

fflush(stdin);
print("Enter y/n");
scanf("%c",&a);

Here,it is quitting before giving the input.it looks like the issue is because it is not flushing out the input buffer which might be having some junk characters.Is there any alternative for flush(stdin).This code snippet is working in Solaris but it is not working in Linux.


Solution 1:

This is well explained in the C FAQ. See also: explanation. The proposed solutions:

  • Quit using scanf. Use fgets and the sscanf
  • Use this to eat the newline

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

The fact that flushing stdin works on some implementations is wrong.

Some vendors do implement fflush so that fflush(stdin) discards unread characters, although portable programs cannot depend on this.

Solution 2:

For C on GNU

you can use



__fpurge(stdin);

include stdio_ext.h header for accessing the function. Though the post is very old still I thought this might help some linux developers.

Solution 3:

scanf(" %c",&c);

or

scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)

Spaces in the scanf() format string will ignore any whitespace until the first non-whitespace.