¿Por qué se detiene en el segundo registro?

Iniciado por Purple rhino, 16 Septiembre 2016, 07:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Purple rhino

Buenas noches, estoy haciendo el código para un programa que permita hacer 10 registros  y poder volver al menú cuando así se quiera y de igual forma desde el menú acceder a los datos que ya han sido registrados previamente, el programa funciona bien al ingresar y guardar los datos de los 2 primeros registros, pero a partir de ahí cada que quiero realizar un nuevo registro se guarda siempre como si fuera el segundo y de ahí no pasa, mi duda es ¿Por qué no sigue avanzando en los registros y siempre aparece el 2?

Este es el código, ojalá me puedan ayudar

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct {
char NO[28], SE;
int ED, SA;
}paciente;
paciente PAC[10];
main (){
int ME, i, OP, s;
Inicio:
printf("MENU PRINCIPAL\n"),
printf("\n1. Ingresar nuevos datos\n"),
printf("2. Consultar pacientes registrados\n"),
printf("3. Salir\n"),
printf("\nElija la opcion que desea: "),
scanf("%d", &ME);
switch (ME){
case 1:
do{
        system("cls");
        printf("INGRESAR NUEVOS DATOS\n");
        printf("\n%i. Datos del paciente",i+1);
printf("\n");
fflush(stdin);
printf("Nombre y apellido paterno: ");
gets(PAC[i].NO);
fflush(stdin);
printf("Edad: ");
scanf("%d",&PAC[i].ED);
fflush(stdin);
printf("Sexo: ");
scanf("%c",&PAC[i].SE);
fflush(stdin);
printf("Condicion de salud: ");
scanf("%d",&PAC[i].SA);
fflush(stdin);
printf("\nLos datos del paciente han sido ingresados.");
printf("\nDesea regresar al menu?\n1.Regresar al menu / 2.Salir: ");
    scanf("%d", &OP);}
    while(i=0,i<10,i++);
    switch (OP){
    case 1:
    system("cls");
    goto Inicio;
    break;
    case 2:
    system("cls");
            printf("\nUSTED HA SALIDO DE LA BASE DE DATOS DEL HOSPITAL GENERAL.\n");
            system("pause");
            return 0;
            break;}
case 2:
system("cls");
printf("DATOS DE LOS PACIENTES\n");
    for(i=0;i<10;i++){
    printf("\n");
    printf("Paciente%d\n",(i+1));
        printf("Nombre y apellido paterno:%s\n",PAC[i].NO);
        printf("Edad:%d\n",PAC[i].ED);
        printf("Sexo:%c\n",PAC[i].SE);
        printf("Condicion de salud:%d\n",PAC[i].SA);
}
    break;
    case 3:
    system("cls");
printf("\nUSTED HA SALIDO DE LA BASE DE DATOS DEL HOSPITAL GENERAL.");
break;}
getchar();
}

AlbertoBSD

La condicion de tu do-while esta mal.


do{
// Omitido
printf("\nDesea regresar al menu?\n1.Regresar al menu / 2.Salir: ");
    scanf("%d", &OP);
}  while(i=0,i<10,i++);



Cuando deberia de ser
do{
// Omitido
printf("\nDesea regresar al menu?\n1.Regresar al menu / 2.Salir: ");
    scanf("%d", &OP);
}  while(OP !=2);


Saludos!


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Purple rhino

Muchas gracias por responder AlbertBSD, aunque lo que busco es que al elegir ingresar datos se ingresen los de la persona 1, al volver a entrar a la misma opción se registren los de la persona 2 y así sucesivamente hasta llegar a la persona 10 y si en algún momento se decide tener acceso a los datos ya registrados se muestren los que han sido registrados hasta el momento. Todo eso me funciona con la persona 1 y con la persona 2 pero a partir de ahí cada que quiero ingresar un nuevo registro siempre aparece como si fuera la persona 2.

AlbertoBSD

El otro problema que veo es que estas usando la misma variable para iterar en todos los datos.

El "i" se reinicailiza cuando muestras datos y deberias de usar otra variable cuando queras agregar datos nuevos, como por ejemplo tener una variable que siempre guarde el numero del ultimo registro guardado en el arreglo.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Purple rhino

Muchas gracias por tus consejos, la verdad es que soy principiante en esto pero ya estoy entendiendo más al problema con lo que me dices.

Saludos.