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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Problemas para leer datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Problemas para leer datos  (Leído 3,046 veces)
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
[C] Problemas para leer datos
« 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. }


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [C] Problemas para leer datos
« Respuesta #1 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');


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] Problemas para leer datos
« Respuesta #2 en: 16 Junio 2010, 18:39 pm »

Muchas gracias... Una pregunta, sería correcto utilizar:

Código
  1. setbuf(stdin, NULL);
:huh:
En línea

Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: [C] Problemas para leer datos
« Respuesta #3 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
En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] Problemas para leer datos
« Respuesta #4 en: 16 Junio 2010, 18:51 pm »

 :-\ No comprendo tu respuesta... O tu link... O no encuentro la respuesta a setbuf.
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [C] Problemas para leer datos
« Respuesta #5 en: 16 Junio 2010, 19:00 pm »

He leído que usar setbuf(stdin, NULL), puede resultar en un comportamiento no definido.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Horricreu
Wiki

Desconectado Desconectado

Mensajes: 290

¡La verdad os hará libres!


Ver Perfil WWW
Re: [C] Problemas para leer datos
« Respuesta #6 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á).

Saludos :P

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
« Última modificación: 26 Agosto 2010, 01:23 am por Horricreu » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [C] Problemas para leer datos
« Respuesta #7 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
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: [C] Problemas para leer datos
« Respuesta #8 en: 16 Junio 2010, 19:03 pm »

Muchas gracias.
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