Foro de elhacker.net

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. typedef struct {
  5. char NO[28], SE;
  6. int ED, SA;
  7. }paciente;
  8. paciente PAC[10];
  9. main (){
  10. int ME, i, OP, s;
  11. Inicio:
  12. printf("MENU PRINCIPAL\n"),
  13. printf("\n1. Ingresar nuevos datos\n"),
  14. printf("2. Consultar pacientes registrados\n"),
  15. printf("3. Salir\n"),
  16. printf("\nElija la opcion que desea: "),
  17. scanf("%d", &ME);
  18. switch (ME){
  19. case 1:
  20. do{
  21.        system("cls");
  22.        printf("INGRESAR NUEVOS DATOS\n");
  23.        printf("\n%i. Datos del paciente",i+1);
  24. printf("\n");
  25. fflush(stdin);
  26. printf("Nombre y apellido paterno: ");
  27. gets(PAC[i].NO);
  28. fflush(stdin);
  29. printf("Edad: ");
  30. scanf("%d",&PAC[i].ED);
  31. fflush(stdin);
  32. printf("Sexo: ");
  33. scanf("%c",&PAC[i].SE);
  34. fflush(stdin);
  35. printf("Condicion de salud: ");
  36. scanf("%d",&PAC[i].SA);
  37. fflush(stdin);
  38. printf("\nLos datos del paciente han sido ingresados.");
  39. printf("\nDesea regresar al menu?\n1.Regresar al menu / 2.Salir: ");
  40.    scanf("%d", &OP);}
  41.    while(i=0,i<10,i++);
  42.    switch (OP){
  43.     case 1:
  44.     system("cls");
  45.     goto Inicio;
  46.     break;
  47.     case 2:
  48.     system("cls");
  49.            printf("\nUSTED HA SALIDO DE LA BASE DE DATOS DEL HOSPITAL GENERAL.\n");
  50.            system("pause");
  51.            return 0;
  52.            break;}
  53. case 2:
  54. system("cls");
  55. printf("DATOS DE LOS PACIENTES\n");
  56.    for(i=0;i<10;i++){
  57.     printf("\n");
  58.     printf("Paciente%d\n",(i+1));
  59.        printf("Nombre y apellido paterno:%s\n",PAC[i].NO);
  60.        printf("Edad:%d\n",PAC[i].ED);
  61.        printf("Sexo:%c\n",PAC[i].SE);
  62.        printf("Condicion de salud:%d\n",PAC[i].SA);
  63. }
  64.    break;
  65.    case 3:
  66.    system("cls");
  67. printf("\nUSTED HA SALIDO DE LA BASE DE DATOS DEL HOSPITAL GENERAL.");
  68. break;}
  69. }
  70.  


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.


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


Cuando deberia de ser
Código
  1. do{
  2. // Omitido
  3. printf("\nDesea regresar al menu?\n1.Regresar al menu / 2.Salir: ");
  4.    scanf("%d", &OP);
  5. }  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.