Uso de fflush(stdin) en C

fflush() generalmente se usa solo para el flujo de salida. Su propósito es borrar (o vaciar) el búfer de salida y mover los datos almacenados en el búfer a la consola (en el caso de la salida estándar) o al disco (en el caso del flujo de salida del archivo). A continuación se muestra su sintaxis.

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.

¿Podemos usarlo para flujo de entrada como stdin?  
Según el estándar C, es un comportamiento indefinido usar fflush (stdin). Sin embargo, algunos compiladores como Microsoft Visual Studio lo permiten . ¿Cómo se usa en estos compiladores? Al tomar una string de entrada con espacios, el búfer no se borra para la siguiente entrada y considera la entrada anterior para la misma. Para resolver este problema es fflush(stdin). se utiliza para borrar la secuencia/el búfer. 

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;
}

Aporte: 

geeks   
geeksforgeeks

Producción:  

geeks 
geeks 

El código anterior toma solo una entrada y da el mismo resultado para la segunda entrada. La razón es porque la string ya está almacenada en el búfer, es decir, la transmisión aún no se ha borrado, ya que esperaba una string con espacios o una nueva línea. Entonces, para manejar esta situación, se usa fflush (stdin).

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;
}

Aporte: 

geeks
geeksforgeeks

Producción:  

geeks 
geeksforgeeks

¿Es bueno usar fflush (stdin)?

Aunque el uso de «fflush(stdin)» después de la declaración «scanf()» también borra el búfer de entrada en ciertos compiladores, no se recomienda usarlo ya que es un comportamiento indefinido según los estándares del lenguaje. En C y C++, tenemos diferentes métodos para borrar el búfer discutidos en esta publicación .

Referencia: 
https://stackoverflow.com/questions/2979209/using-fflushstdin

Este artículo es una contribución de Sahil Chhabra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *