Use of fflush(stdin) in C

13 Sep, 2021
fflush() is typically used for output stream only. Its purpose is to clear (or flush) the output buffer and move the buffered data to console (in case of stdout) or disk (in case of file output stream). Below is its syntax.
fflush(FILE *ostream);

ostream points to an output stream 
or an update stream in which the 
most recent operation was not input, 
the fflush function causes any 
unwritten data for that stream to 
be delivered to the host environment 
to be written to the file; otherwise, 
the behavior is undefined.
Can we use it for input stream like stdin? As per C standard, it is undefined behavior to use fflush(stdin). However some compilers like Microsoft visual studio allows it. How is it used in these compilers? While taking an input string with spaces, the buffer does not get cleared for the next input and considers the previous input for the same. To solve this problem fflush(stdin) is. used to clear the stream/buffer. 
C
// C program to illustrate situation// where flush(stdin) is required only// in certain compilers.#include <stdio.h>#include<stdlib.h>int main(){    char str[20];    int i;    for (i=0; i<2; i++)    {        scanf("%[^\n]s", str);        printf("%s\n", str);        // fflush(stdin);    }    return 0;}
Input: 
geeks   
geeksforgeeks
Output:  
geeks 
geeks 
The code above takes only single input and gives the same result for the second input. Reason is because as the string is already stored in the buffer i.e. stream is not cleared yet as it was expecting string with spaces or new line. So, to handle this situation fflush(stdin) is used.
C
// C program to illustrate flush(stdin)// This program works as expected only// in certain compilers like Microsoft// visual studio.#include <stdio.h>#include<stdlib.h>int main(){    char str[20];    int i;    for (i = 0; i<2; i++)    {        scanf("%[^\n]s", str);        printf("%s\n", str);         // used to clear the buffer        // and accept the next string        fflush(stdin);    }    return 0;}
Input: 
geeks
geeksforgeeks
Output:  
geeks 
geeksforgeeks
Is it good to use fflush(stdin)?
Although using “fflush(stdin)” after “scanf()” statement also clears the input buffer in certain compilers, it is not recommended to use it as it is undefined behavior by the language standards. In C and C++, we have different methods to clear the buffer discussed in this post.
Reference: https://stackoverflow.com/questions/2979209/using-fflushstdin
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
swastikmishra3000
C-Input and Output Quiz
c-input-output
C Language
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Substring in C++
Function Pointer in C
Different Methods to Reverse a String in C++
std::string class in C++
Unordered Sets in C++ Standard Template Library
Enumeration (or enum) in C
Memory Layout of C Programs
C Language Introduction
What is the purpose of a function prototype?
Power Function in C/C++