Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: romybe en 5 Diciembre 2014, 02:38 am



Título: Problema al compilar con struct
Publicado por: romybe en 5 Diciembre 2014, 02:38 am
Hola! Estoy teniendo este mensaje invalid types `int[int]' for array subscript con las líneas 66, 68, 70 y 72 cuando intento compilar el código. Honestamente no sé dónde pueda estar el problema. Espero que me puedan ayudar.

P.D.: estoy usando DEV C++ version 4.9.9.2


Código
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.        char dia [9];
  7.        int hora_inicio;
  8.        int minutos_inicio;
  9.        int hora_finalizacion;
  10.        int minutos_finalizacion;
  11.        } horario_atencion;
  12.  
  13. typedef struct {
  14.        char nombre_medico [20];
  15.        char apellido_medico [20];
  16.        char dni_medico [8];
  17.        char especialidad [20];
  18.        char domicilio_medico [30];
  19.        char nro_consultorio [2];
  20.        char telefono_medico [15];
  21.        horario_atencion horario;
  22.        } medico;
  23.  
  24. void alta_medico (medico m[], int &lim);
  25.  
  26. void alta_medico (medico m[], int &lim)
  27. {
  28.     int cant_dias;
  29.  
  30.     while (lim>50)
  31.     {
  32.           printf ("Cuantos medicos desea ingresar?");
  33.           scanf ("%d", &lim);
  34.     }
  35.  
  36.     for (int i=0;i<lim;i++)
  37.     {
  38.         printf ("Ingrese el nombre del medico: ");
  39.         gets (m[i].nombre_medico);
  40.         fflush (stdin);
  41.         printf ("Ingrese el apellido del medico: ");
  42.         gets (m[i].apellido_medico);
  43.         fflush (stdin);
  44.         printf ("Ingrese el DNI del medico: ");
  45.         gets (m[i].dni_medico);
  46.         printf ("Ingrese la especialidad del medico: ");
  47.         gets (m[i].especialidad);
  48.         fflush (stdin);
  49.         printf ("Ingrese el domicilio del medico: ");
  50.         scanf ("%[^\n]", m[i].domicilio_medico);
  51.         fflush (stdin);
  52.         printf ("Ingrese el numero de consultorio del medico: ");
  53.         gets (m[i].nro_consultorio);
  54.         fflush (stdin);
  55.         printf ("Ingrese el telefono del medico: ");
  56.         gets (m[i].telefono_medico);
  57.         fflush (stdin);
  58.         printf (" Cuantos dias a la semana trabajara el medico: ");
  59.         scanf ("%d", &cant_dias);
  60.         for (int j=0;j<cant_dias;j++)
  61.         {
  62.             printf ("Ingrese el dia de la semana: ");
  63.             scanf ("%s", &m[i].horario.dia[j]);
  64.             fflush (stdin);
  65.             printf ("Ingrese la hora de comienzo de la consulta para el dia %s: ", m[i].horario.dia[j]);
  66.             scanf ("%d", &m[i].horario.hora_inicio[j]);
  67.             printf ("Ingrese los minutos de comienzo de la consulta para el dia %s: ", m[i].horario.dia[j]);
  68.             scanf ("%d", &m[i].horario.minutos_inicio[j]);
  69.             printf ("Ingrese la hora de finalizacion de la consulta para el dia %s: ", m[i].horario.dia[j]);
  70.             scanf ("%d", &m[i].horario.hora_finalizacion[j]);
  71.             printf ("Ingrese los minutos de finalizacion de la consulta para el dia %s: ", m[i].horario.dia[j]);
  72.             scanf ("%d", &m[i].horario.minutos_finalizacion[j]);
  73.         }
  74.     }
  75. }
  76.  


Título: Re: Problema al compilar con struct
Publicado por: x64core en 5 Diciembre 2014, 02:52 am
Viendo la logica de tu programa y usando el sentido cómun de lo que quieres lograr entonces no deberia de tener el campo "horario" de la estructura medico ser un array de 7 (7 dias supongo) además de tener un campo para determinar el numero de dias?


Título: Re: Problema al compilar con struct
Publicado por: leobr6 en 5 Diciembre 2014, 04:04 am
Si mal no entiendo lo que querés hacer, parece que lo que necesitas es un arreglo de horarios
Código
  1. typedef struct {
  2.        char nombre_medico [20];
  3.        char apellido_medico [20];
  4.        char dni_medico [8];
  5.        char especialidad [20];
  6.        char domicilio_medico [30];
  7.        char nro_consultorio [2];
  8.        char telefono_medico [15];
  9.        /* Esto es 1 solo horario, necesitarias un arreglo */
  10.        horario_atencion horario;
  11. } medico;

Podrías querer algo asi:
Código
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.        char dia [9];
  7.        int hora_inicio;
  8.        int minutos_inicio;
  9.        int hora_finalizacion;
  10.        int minutos_finalizacion;
  11.        } horario_atencion;
  12.  
  13. typedef struct {
  14.        char nombre_medico [20];
  15.        char apellido_medico [20];
  16.        char dni_medico [8];
  17.        char especialidad [20];
  18.        char domicilio_medico [30];
  19.        char nro_consultorio [2];
  20.        char telefono_medico [15];
  21.        /* USAS UN ARREGLO DE HORARIOS */
  22.        horario_atencion *horarios;
  23.        } medico;
  24.  
  25. void alta_medico (medico m[], int &lim);
  26.  
  27. void alta_medico (medico m[], int &lim)
  28. {
  29.     int cant_dias;
  30.  
  31.     while (lim>50)
  32.     {
  33.           printf ("Cuantos medicos desea ingresar?");
  34.           scanf ("%d", &lim);
  35.     }
  36.  
  37.     for (int i=0;i<lim;i++)
  38.     {
  39.         printf ("Ingrese el nombre del medico: ");
  40.         gets (m[i].nombre_medico);
  41.         fflush (stdin);
  42.         printf ("Ingrese el apellido del medico: ");
  43.         gets (m[i].apellido_medico);
  44.         fflush (stdin);
  45.         printf ("Ingrese el DNI del medico: ");
  46.         gets (m[i].dni_medico);
  47.         printf ("Ingrese la especialidad del medico: ");
  48.         gets (m[i].especialidad);
  49.         fflush (stdin);
  50.         printf ("Ingrese el domicilio del medico: ");
  51.         scanf ("%[^\n]", m[i].domicilio_medico);
  52.         fflush (stdin);
  53.         printf ("Ingrese el numero de consultorio del medico: ");
  54.         gets (m[i].nro_consultorio);
  55.         fflush (stdin);
  56.         printf ("Ingrese el telefono del medico: ");
  57.         gets (m[i].telefono_medico);
  58.         fflush (stdin);
  59.         printf (" Cuantos dias a la semana trabajara el medico: ");
  60.         scanf ("%d", &cant_dias);
  61.  
  62.         /* CREAS EL ARREGLO DE HORARIOS */
  63.         m[i].horarios = new horario_atencion[cant_dias];        
  64.  
  65.         for (int j=0;j<cant_dias;j++)
  66.         {
  67.             printf ("Ingrese el dia de la semana: ");
  68.             scanf ("%s", &m[i].horarios[j].dia);
  69.             fflush (stdin);
  70.             printf ("Ingrese la hora de comienzo de la consulta para el dia %s: ", m[i].horarios[j].dia);
  71.             scanf ("%d", &m[i].horarios[j].hora_inicio);
  72.             printf ("Ingrese los minutos de comienzo de la consulta para el dia %s: ", m[i].horarios[j].dia);
  73.             scanf ("%d", &m[i].horarios[j].minutos_inicio);
  74.             printf ("Ingrese la hora de finalizacion de la consulta para el dia %s: ", m[i].horarios[j].dia);
  75.             scanf ("%d", &m[i].horarios[j].hora_finalizacion);
  76.             printf ("Ingrese los minutos de finalizacion de la consulta para el dia %s: ", m[i].horarios[j].dia);
  77.             scanf ("%d", &m[i].horarios[j].minutos_finalizacion);
  78.         }
  79.     }
  80. }

Espero te sirva. Saludos