Resultados 1 al 6 de 6

Tema: Vaciar buffer del teclado en C (GCC)

  1. #1
    Viciadill@
    Ubicación
    Valladolid
    Edad
    39
    Mensajes
    131

    Predeterminado Vaciar buffer del teclado en C (GCC)

    Hola a todos:

    Mi pregunta es si hay alguna manera de vaciar el buffer del teclado cuando se programa con Gcc, ya que fflush(stdin) no funciona. Y saber tambien cuando hay que utilizarlo exactamente.

    Muchas gracias.

  2. #2

    Predeterminado Re: Vaciar buffer del teclado en C (GCC)

    Puedes probar con este "truco", poniendolo despues de cada scanf() :

    Código:
    while(getchar()!='\n');

  3. #3
    Viciadill@
    Ubicación
    Valladolid
    Edad
    39
    Mensajes
    131

    Predeterminado Re: Vaciar buffer del teclado en C (GCC)

    Funciona!!!!!

    ¿Me podrias decir como funciona y cuando tengo que utilizarlo?

    Muchas gracias.

  4. #4

    Predeterminado Re: Vaciar buffer del teclado en C (GCC)

    La cuestión es que scanf solo saca del buffer de teclado (stdin) el dato que le indicas en la cadena de formato, pero deja todo lo demas dentro. Es decir cuando pulsas "intro" en la consola eso se almacena como un caracter '\n' (retorno de carro). Y la siguiente vez que llamas a scanf, lo primero que se encuentra en el buffer es el "intro" que esta todavia ahi de la vez anterior. Por eso no espera a que tu introduzcas nada.

    Paso por paso, por si no se entiende:

    - Llamada a scanf("%d", &numero);
    - Como el buffer esta vacio, se espera a que el usuario introduzca por teclado:
    - Introduces el numero 54 y pulsas Intro.
    - El buffer ahora contiene esta cadena: "54\n"
    - scanf() extrae el primer valor numerico que encuentra: 54
    - El buffer contiene ahora: "\n"
    - Llamada a scanf("%d", &numero); (por segunda vez)
    - Como en el buffer ya hay un '\n' , que es como si ya hubieras pulsado Intro, se finaliza la entrada por teclado sin darte oportunidad a escribir nada...

    El "truco" de poner
    Código:
    while(getchar()!='\n');
    Lo que hace es ir extrayendo del buffer todos los caracteres que encuentra hasta que llega al '\n'.

    Puedes ponerte como norma que cada vez que hagas un scanf (justo despues) limpies el buffer, asi te evitas problemas.

  5. #5
    Viciadill@
    Ubicación
    Valladolid
    Edad
    39
    Mensajes
    131

    Predeterminado Re: Vaciar buffer del teclado en C (GCC)

    La verdad es que solo me da el problema cuando pide un caracter por segunda vez. Cuando es un numero puede hacer varios scanf sin problemas.

    Muchas gracias.

  6. #6

    Predeterminado Re: Vaciar buffer del teclado en C (GCC)

    Pues si, lo acabo de probar y por lo visto sólo pasa con caracteres, con números no :P

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •