elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con el buffer del teclado no es fflush(stdin) tranquilos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con el buffer del teclado no es fflush(stdin) tranquilos  (Leído 982 veces)
gitii

Desconectado Desconectado

Mensajes: 6


Ver Perfil
problema con el buffer del teclado no es fflush(stdin) tranquilos
« 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;
}


« Última modificación: 30 Abril 2018, 21:25 pm por gitii » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.523



Ver Perfil
Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
« Respuesta #1 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.


En línea

animanegra

Desconectado Desconectado

Mensajes: 283



Ver Perfil
Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
« Respuesta #2 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?
En línea


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

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: problema con el buffer del teclado no es fflush(stdin) tranquilos
« Respuesta #3 en: 30 Abril 2018, 21:04 pm »

gracias mafus



animanegra por culpa del salto de linea
« Última modificación: 1 Mayo 2018, 01:27 am por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines