Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Purple rhino en 16 Septiembre 2016, 07:31 AM

Título: ¿Por qué se detiene en el segundo registro?
Publicado por: Purple rhino en 16 Septiembre 2016, 07:31 AM
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();
}
Título: Re: ¿Por qué se detiene en el segundo registro?
Publicado por: AlbertoBSD en 16 Septiembre 2016, 13:44 PM
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!


Título: Re: ¿Por qué se detiene en el segundo registro?
Publicado por: Purple rhino en 17 Septiembre 2016, 01:36 AM
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.
Título: Re: ¿Por qué se detiene en el segundo registro?
Publicado por: AlbertoBSD en 17 Septiembre 2016, 22:28 PM
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!
Título: Re: ¿Por qué se detiene en el segundo registro?
Publicado por: Purple rhino en 18 Septiembre 2016, 09:14 AM
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.