Tengo el siguiente problema:
cbug@debian:~$ ./a.out
Ingrese cantidad de personas>
1
---INGRESO DE PACIENTES---
Ingrese nombre>
Ingrese fecha visita
|
Resulta que no puedo ingresar el nombre.
#include <stdio.h>
/* Programa para manejo de una lista de pacientes */
/* Se mostraran los pacientes con una fecha determinada de visita */
#define MAX 30
typedef struct Paciente{
char nombre[20];
char direccion[20];
char fechanac[13];
char sexo;
char fechavisita[13];
char problema[100];
}PACIENTE;
void Ingreso_Lista(PACIENTE P[], int N);
void Ingreso_Paciente(PACIENTE *P);
void Muestra(PACIENTE P[], int N, char F[]);
int main(){
int cantidad;
PACIENTE MiLista[MAX];
char fecha[13];
puts("Ingrese cantidad de personas>");
scanf("%d", &cantidad);
Ingreso_Lista(MiLista, cantidad);
puts("Ingrese fecha a buscar>");
fgets(fecha, sizeof(char)*13, stdin);
Muestra(MiLista, cantidad, fecha);
}
void Ingreso_Paciente(PACIENTE *P){
puts("Ingrese nombre>");
fgets(P->nombre,sizeof(char)*20,stdin);
puts("Ingrese fecha visita");
fgets(P->fechavisita,sizeof(char)*13,stdin);
}
void Ingreso_Lista(PACIENTE P[], int N){
int i;
puts("---INGRESO DE PACIENTES---");
fflush(stdout);
for(i = 0; i < N; i++)
Ingreso_Paciente(&P[i]);
puts("---FINALIZADO---");
}
void Muestra(PACIENTE P[], int N, char F[]){
int i;
for(i = 0; i < N; i++)
if(*P[i].fechavisita == *F)
puts(P[i].nombre);
}
Tienes que limpiar el buffer.
Déjalo así:
puts("Ingrese cantidad de personas>");
scanf("%d", &cantidad);
while(getchar() != '\n');
Muchas gracias... Una pregunta, sería correcto utilizar:
setbuf(stdin, NULL);
:huh:
Léete esto, es una chincheta:
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
Saludos :P
:-\ No comprendo tu respuesta... O tu link... O no encuentro la respuesta a setbuf.
He leído que usar setbuf(stdin, NULL), puede resultar en un comportamiento no definido.
Cita de: cbug en 16 Junio 2010, 18:51 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.
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
Muchas gracias.