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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 2,160 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.603



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: 287



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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Limpieza de buffer de teclado en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 16 11,341 Último mensaje 20 Enero 2014, 23:37 pm
por leosansan
Problema, return address buffer overflow (Cómo calcular la dirección del buffer?
Bugs y Exploits
Debci 6 7,679 Último mensaje 7 Abril 2014, 20:00 pm
por soez
El Visual Studio me ignora el fflush(stdin).
Programación C/C++
Luffy97 3 3,273 Último mensaje 29 Octubre 2015, 18:42 pm
por Kaxperday
Ayuda con algoritmo recursivo y fflush(stdin)
Programación C/C++
Beginner Web 3 1,991 Último mensaje 5 Julio 2018, 00:10 am
por MAFUS
¿Queda algo en el Buffer de Entrada stdin? (Solucionado) « 1 2 »
Programación C/C++
AlbertoBSD 11 5,597 Último mensaje 7 Diciembre 2018, 09:46 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines