Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gitii en 30 Abril 2018, 16:57 pm



Título: problema con el buffer del teclado no es fflush(stdin) tranquilos
Publicado por: gitii en 30 Abril 2018, 16:57 pm
Tengo un pequeño problema al utilizar while((getchar()) != '\n'); y es que cuando se ingresan menos caracteres de los que hay en el buffer se queda esperando el enter que es como deberia ser pero queda un poco feo. No doy encontrado la solucion si alguien me puede ayudar se lo agradezco un saludo!
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct alumno{

    char nombre[20];
    char apellido[20];
    char colegio[20];
};

void imprimir_datos(){

    struct alumno alu;
    printf("Pon el nombre: ");

    fgets(alu.nombre,20,stdin);

    while((getchar()) != '\n');

    printf("Pon el apellido: ");


    fgets(alu.apellido,20,stdin);
    while((getchar()) != '\n');

    printf("Pon el colegio: ");
    fgets(alu.colegio,20,stdin);

    printf("%s\n",alu.nombre);
    printf("%s\n",alu.apellido);
    printf("%s",alu.colegio);



}
int main(){

    imprimir_datos();

    return 0;
}


Título: Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
Publicado por: MAFUS en 30 Abril 2018, 21:01 pm
Qué tal así:

Código
  1. void bufflush(char *str) {
  2.    char *c = strchr(str, '\n');
  3.  
  4.    if(c)
  5.        *c = '\0';
  6.    else
  7.        while(getchar()!='\n');
  8. }

Esta función se usa en conjunción con fgets aprovechando que esta también adquiere el retorno de carro.
Sí por límite de caracteres no ha conseguido de capturar todo desde el buffer, ésta función limpiará lo que ha sobrado incluso el carácter de nueva línea.
En cambio si se ha capturado, incluso el carácter de nueva línea, la función lo buscará y lo sustituirá por un carácter nulo (consiguiendo así que nuestra cadena no haga un cambio de línea no deseado cuando la representemos) y ya no esperara el carácter de nueva línea que no existe en el buffer.


Título: Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
Publicado por: animanegra en 30 Abril 2018, 21:01 pm
La pregunta es mas bien, ¿Para que pones el bucle del getchar? fgets ya está cogiendo la palabra hasta el intro. ¿Para que es el bucle del getchar?


Título: Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
Publicado por: gitii en 30 Abril 2018, 21:04 pm
gracias mafus



animanegra por culpa del salto de linea