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