[C con Clase] que cosa es fflush

Reinel Hernández Peraza reinel en uci.cu
Lun Ene 22 17:37:20 CET 2007


Hola Yandy
Bueno, el fflush, es una función que permite limpiar un flujo determinado. Recuerda que en C/C++ se habla de flujos, por ejemplo flujo de entrada, de salida, de entrada/salida etc. 
Por ejemplo cuando tu tienes un programa en que el usuario introduce datos. Esos datos son escritos con el teclado, y luego estos van a depositarse en las variables creadas para cada uno. Pero a veces es necesario poder limpiar la zona de memoria que tiene asociada el teclado, para que quede listo para recibir otros datos. Sin que se mezcle con cosas que allí existan. Para ello nos sirve esta función. Por ejemplo este programa:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int Edad;
    printf("Introduxca su edad: ");
    scanf("%d", &Edad);
    fflush(stdin);
    
    printf("Su edad es de: %d", Edad);
    
    getchar();
   
    return 0;
}

Observa como luego de darle entrada al dato Edad limpiamos stdin. stdin es la entrada estándar, es decir el flujo asociado con la entrada estándar, lo que hacemos es dejarlo limpio. esto es útil porque por ejemplo la función scanf acepta datos, pero no los almacena en la variable hasta que se oprima la tecla ENTER, pero una línea despues existe la función getchar(); la cual, espera a que el usuario oprima ENTER, sino limpiaramos el buffer stdin, es decir si quitáramos la línea fflush(stdin); entonces en el buffer del teclado se quedaría el carácter '\n' que es precisamente el carácter que espera la función getchar() de resultas que el programa "entendería" que ya ENTER fue pulsado y seguiría a la otra línea return 0 terminando y cerrando la ventana (digo, si lo ejecutas desde un sistema operativo no DOS) prueba a comentar la línea fflush(stdin), es decir hazla un comentario para que no se ejecute, y veras como el programa no se queda en pantalla, a pesar de que getchar está esperando a que se presione ENTER para continuar.

Espero que tesea útil la explicasión.
Rey.





Más información sobre la lista de distribución Cconclase