sagraramirez.es

  • Aumentar fuente
  • Fuente predeterminada
  • Disminuir fuente
Advertencia
  • EU e-Privacy Directive

    This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

    View e-Privacy Directive Documents

Home Programación SOLUCIONADO: Limpiar buffer teclado en C usando Lliurex

SOLUCIONADO: Limpiar buffer teclado en C usando Lliurex

E-mail Imprimir PDF

Al programar en C, al coger variables tipo char de teclado se queda en el buffer la pulsación de la tecla Enter. Así pues, el siguiente programa en C:

 

#include <stdio.h>
#include <stdlib.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

 

Pide un caracter, que saca por pantalla, pero al pedir el segundo coge la pulsación de Enter que hemos usado para el primero, no espera a que pulsemos nada, y lo que nos saca al final es una línea en blanco. Para evitar esto debemos limpiar el buffer de entrada antes de pedir el segundo caracter. En Windows podemos utilizar la orden fflush(stdin), que limpia el buffer. Sin embargo no funciona en linux.

Una posible solución es utilizar setbuf para vaciar el buffer de entrada: setbuf(stdin,NULL). De este modo rellenamos el buffer con nada, es decir lo vaciamos. Sin embargo, en la práctica he visto que esta solución solo funciona una vez en el programa (si pedimos 3 letras, en la tercera vuelve a coger el caracter de Enter)

#include <stdio.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
setbuf(stdin,NULL);
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

Otra solución es coger todo lo que quede hasta el Enter al coger un caracter. con while(getchar()!='\n);

#include <stdio.h>
int main() {
char letra;
printf("escribe una letra: ");
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
printf("escribe una letra: ");
while(getchar()!='\n);
scanf("%c",&letra);
printf("Has escrito %c\n",letra);
}

Esta solución vale para coger una palabra entera letra a letra. Ejemplo de código:

#include <stdio.h>
int main() {
char letra;
char palabra[10];
int i;
for (i=0; i<10;i++) {
printf("escribe la letra %d: ",i);
scanf("%c",&letra);
while(getchar()!='\n');
printf("Has escrito %c\n",letra);
palabra[i]=letra;
}
printf("Palabra %s\n",palabra);
}

Última actualización el Lunes, 11 de Junio de 2012 09:10  

Escribir un comentario


Código de seguridad
Refescar