Inicio | Artículos | Cursos Online | Libros | Diccionario | Mapa Web | Enlazar | Contactar | Acerca de


C/C++/C# HTML Java JavaScript Linux PHP Python Swift
CURSO/TUTORIAL DE LENGUAJE C
Introducción
Introducción
Fases de la Puesta a Punto de un Programa en C
Estructura de un Programa
Tipos de Instrucciones
Mi primer Programa
Elementos Básicos
Tipos de Datos
Identificadores
Variables
Constantes
Operadores y Expresiones
Funciones printf y scanf
Comentarios
La Función fflush
Tipos de Errores
Instrucciones de Control
Instrucciones Alternativas
Instrucciones Repetitivas
Instrucciones De Salto
CarlosPes.comCurso de Lenguaje C > La Función fflush en Lenguaje C

La Función fflush en Lenguaje C

¿Para qué sirve la función fflush en C?

Ejemplo 1: Si ejecutamos el siguiente programa:
#include <stdio.h>

int main()
{
   int a, b;

   printf( "Introduzca el primer numero: " );
   scanf( "%d", &a );
   printf( "Introduzca el segundo numero: " );
   scanf( "%d", &b );
   printf( "Los valores son: %d, %d ", a, b );

   return 0;
}
por pantalla veremos algo parecido a:
Introduzca el primer numero: 76
Introduzca el segundo numero: 45
Los valores son: 76, 45
Obsérvese que, cuando se ejecuta scanf, por ejemplo, en la primera vez

scanf( "%d", &a );

el programa se detiene a la espera de que el
usuario teclee el dato de entrada requerido, el cual es almacenado, temporalmente, en el buffer (memoria intermedia) de la entrada estándar. Y cuando se pulsa la tecla INTRO, es, en ese momento, cuando a la variable a se le asigna el valor introducido. Pero, además, se produce un salto de línea automático, de forma que, después de introducir el número 76, la siguiente instrucción se muestra una línea más abajo. De igual forma, después de la instrucción

scanf( "%d", &b );

también se produce un salto de línea automático. En este ejemplo todo ha ido muy bien, sin embargo, se tiene que tener especial cuidado si utilizados
scanf para leer caracteres.

Ejemplo 2: En el siguiente programa:
#include <stdio.h>

int main()
{
   char a, b, c;

   printf( "Introduzca primer caracter: " );
   scanf( "%c", &a );
   printf( "Introduzca segundo caracter: " );
   scanf( "%c", &b );
   printf( "Introduzca tercer caracter: " );
   scanf( "%c", &c );
   printf( "Los valores son: %c, %c, %c ", a, b, c );

   return 0;
}
por pantalla se verá algo similar a:
Introduzca primer caracter: f
Introduzca segundo caracter: Introduzca tercer caracter: h
Los valores son: f,
, h
En esta ocasión, ¿por qué no se ejecuta, correctamente, la siguiente instrucción?

scanf( "%c", &b );

La razón es la siguiente: cuando se ejecuta la primera
instrucción de entrada:

scanf( "%c", &a );

después de asignar el carácter
'f' a la variable a, se produce un salto de línea automático, pero, en el buffer del teclado también se ha quedado almacenada la secuencia de escape (\n), que es, precisamente, un carácter. En consecuencia, cuando se ejecuta la instrucción

scanf( "%c", &b );

a la variable
b se le asigna el salto de línea almacenado en el buffer de la entrada estándar, y la ejecución del programa continua con la siguiente instrucción. Ahora, el buffer vuelve a estar vacío y, por tanto, la entrada de la variable c sí que se ejecuta de forma correcta.

Para comprobar que esto es así, podemos sustituir la instrucción

printf( "Los valores son: %c, %c, %c ", a, b, c );

por esta otra:

printf( "Los valores son: %d, %d, %d ", a, b, c );

En pantalla veremos:
Introduzca primer caracter: f
Introduzca segundo caracter: Introduzca tercer caracter: h
Los valores son: 102, 10, 104
y como se puede comprobar en las tablas del ASCII, los números 102, 10 y 104 corresponden a los caracteres 'f', LF (Salto de Línea) y 'h', respectivamente.

Para resolver este problema, antes de leer un carácter con
scanf, hay que vaciar (limpiar) el buffer del teclado. Para ello, se utiliza la función fflush.

Ejemplo 3: De forma que, el código quedaría de la siguiente manera:
#include <stdio.h>

int main()
{
   char a, b, c;

   printf( "Introduzca primer caracter: " );
   scanf( "%c", &a );
   printf( "Introduzca segundo caracter: " );
   fflush( stdin );
   scanf( "%c", &b );
   printf( "Introduzca tercer caracter: " );
   fflush( stdin );
   scanf( "%c", &c );
   printf( "Los valores son: %c, %c, %c ", a, b, c );

   return 0;
}
La primera vez que se ejecuta scanf, el buffer del teclado está vacío, por tanto, no es preciso utilizar fflush, pero sí, en los dos casos posteriores. Obsérvese que, a fflush hay que indicarle el buffer a limpiar, Standar Input (stdin) en este caso.
Artículos Interesantes
Artículos de Desarrollo Web
Artículos de Informática
Artículos de Programación
Artículos de SEO
Cursos/Tutoriales de Informática
Curso/Tutorial de Algoritmos
Curso/Tutorial de Informática Básica
Curso/Tutorial de Ingeniería del Software
Curso/Tutorial de Lenguaje C
Curso/Tutorial de Marketing en Internet
Curso/Tutorial de Turbo Pascal
Curso/Tutorial de Representación de los Datos
Curso/Tutorial para Webmasters
Curso/Tutorial Web 2.0
Curso de SEO
Libros de Carlos Pes
36 Pasos Básicos para Desarrollar un Sitio Web
Empezar de Cero a Programar en Lenguaje C
Fundamentos del SEO
Libros Recomendados
Libros de Analítica Web
Libros de Desarrollo Web
Libros de Java
Libros de Lenguaje C
Libros de Marketing Online
Libros de Pascal (Turbo Pascal)
Libros de SEO
Libros de Visual Basic
Recursos de Informática
Diccionario de Informática
Ejercicios de Programación
Guías de uso de Software
Sintaxis de Lenguajes de Programación
Biografías
Entrevistas
Frases y Citas
Recursos Educativos
Presentaciones Educativas
Videos Educativos
Enlaces Web
Acerca de Carlos Pes
Bibliotecas
Colaboradores
Contactar
Enlazar
Librerías
Perfiles en Internet
Mapa Web
Blog de Carlos Pes Blog de Carlos Pes
© CarlosPes.com | Privacidad | Condiciones