problema con el buffer del teclado no es fflush(stdin) tranquilos

Iniciado por gitii, 30 Abril 2018, 16:57 PM

0 Miembros y 1 Visitante están viendo este tema.

gitii

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!
#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;
}

MAFUS

Qué tal así:

void bufflush(char *str) {
    char *c = strchr(str, '\n');

    if(c)
        *c = '\0';
    else
        while(getchar()!='\n');
}


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.

animanegra

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?

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.

gitii

#3
gracias mafus




animanegra por culpa del salto de linea