Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cbug en 16 Junio 2010, 17:59 pm



Título: [C] Problemas para leer datos
Publicado por: cbug en 16 Junio 2010, 17:59 pm
Tengo el siguiente problema:

Código:
cbug@debian:~$ ./a.out 
Ingrese cantidad de personas>
1   
---INGRESO DE PACIENTES---
Ingrese nombre>
Ingrese fecha visita
|

Resulta que no puedo ingresar el nombre.

Código
  1. #include <stdio.h>
  2.  
  3. /* Programa para manejo de una lista de pacientes */
  4. /* Se mostraran los pacientes con una fecha determinada de visita */
  5.  
  6. #define MAX 30
  7.  
  8. typedef struct Paciente{
  9. char nombre[20];
  10. char direccion[20];
  11. char fechanac[13];
  12. char sexo;
  13. char fechavisita[13];
  14. char problema[100];
  15. }PACIENTE;
  16.  
  17. void Ingreso_Lista(PACIENTE P[], int N);
  18. void Ingreso_Paciente(PACIENTE *P);
  19. void Muestra(PACIENTE P[], int N, char F[]);
  20.  
  21. int main(){
  22. int cantidad;
  23. PACIENTE MiLista[MAX];
  24. char fecha[13];
  25. puts("Ingrese cantidad de personas>");
  26. scanf("%d", &cantidad);
  27. Ingreso_Lista(MiLista, cantidad);
  28. puts("Ingrese fecha a buscar>");
  29. fgets(fecha, sizeof(char)*13, stdin);
  30. Muestra(MiLista, cantidad, fecha);
  31. }
  32.  
  33. void Ingreso_Paciente(PACIENTE *P){
  34. puts("Ingrese nombre>");
  35. fgets(P->nombre,sizeof(char)*20,stdin);
  36. puts("Ingrese fecha visita");
  37. fgets(P->fechavisita,sizeof(char)*13,stdin);
  38. }
  39.  
  40. void Ingreso_Lista(PACIENTE P[], int N){
  41. int i;
  42. puts("---INGRESO DE PACIENTES---");
  43. fflush(stdout);
  44. for(i = 0; i < N; i++)
  45. Ingreso_Paciente(&P[i]);
  46. puts("---FINALIZADO---");
  47. }
  48.  
  49. void Muestra(PACIENTE P[], int N, char F[]){
  50. int i;
  51. for(i = 0; i < N; i++)
  52. if(*P[i].fechavisita == *F)
  53. puts(P[i].nombre);
  54. }


Título: Re: [C] Problemas para leer datos
Publicado por: leogtz en 16 Junio 2010, 18:30 pm
Tienes que limpiar el buffer.

Déjalo así:
Código:
puts("Ingrese cantidad de personas>");
scanf("%d", &cantidad);
while(getchar() != '\n');


Título: Re: [C] Problemas para leer datos
Publicado por: cbug en 16 Junio 2010, 18:39 pm
Muchas gracias... Una pregunta, sería correcto utilizar:

Código
  1. setbuf(stdin, NULL);
:huh:


Título: Re: [C] Problemas para leer datos
Publicado por: Horricreu en 16 Junio 2010, 18:49 pm
Léete esto, es una chincheta:

Código:
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Saludos :P


Título: Re: [C] Problemas para leer datos
Publicado por: cbug en 16 Junio 2010, 18:51 pm
 :-\ No comprendo tu respuesta... O tu link... O no encuentro la respuesta a setbuf.


Título: Re: [C] Problemas para leer datos
Publicado por: leogtz en 16 Junio 2010, 19:00 pm
He leído que usar setbuf(stdin, NULL), puede resultar en un comportamiento no definido.


Título: Re: [C] Problemas para leer datos
Publicado por: Horricreu en 16 Junio 2010, 19:01 pm
:-\ No comprendo tu respuesta... O tu link... O no encuentro la respuesta a setbuf.

Supongo que lo dices por lo de limpiar el buffer. En esta chincheta hay la forma correcta de hacerlo, no sé si sale para ficheros.

En cuando a setbuf(), me parece que está mal: el primer parámetro debe de ser un puntero a fichero o en su defecto streams como stdout o stderr para limpiarlo (leído de acá (http://www.cplusplus.com/reference/clibrary/cstdio/setbuf/)).

Saludos :P

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: [C] Problemas para leer datos
Publicado por: Littlehorse en 16 Junio 2010, 19:01 pm
cbug, efectivamente no esta la referencia a setbuf. No la he agregado porque es una mala costumbre bastante reciente en este foro, pero la agregare en cualquier momento. Igualmente horricreu te paso el link para que tomes la idea que si no dejas basura en el buffer, no necesitas limpiarlo.

En cuanto a lo de setbuf, es incorrecto. Utilizar setbuf de esa forma acarrea comportamiento indefinido.

Saludos


Título: Re: [C] Problemas para leer datos
Publicado por: cbug en 16 Junio 2010, 19:03 pm
Muchas gracias.