Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]

#include <stdio.h>
#include <iostream>
#include <string.h>

typedef struct {
        char dia [9];
        int hora_inicio;
        int minutos_inicio;
        int hora_finalizacion;
        int minutos_finalizacion;
        } horario_atencion;
       
typedef struct {
        char nombre_medico [20];
        char apellido_medico [20];
        char dni_medico [8];
        char especialidad [20];
        char domicilio_medico [30];
        char nro_consultorio [2];
        char telefono_medico [15];
        horario_atencion horario;
        } medico;

void alta_medico (medico m[], int &lim);

void alta_medico (medico m[], int &lim)
{
     int cant_dias;
     
     while (lim>50)
     {
           printf ("Cuantos medicos desea ingresar?");
           scanf ("%d", &lim);
     }
     
     for (int i=0;i<lim;i++)
     {
         printf ("Ingrese el nombre del medico: ");
         gets (m[i].nombre_medico);
         fflush (stdin);
         printf ("Ingrese el apellido del medico: ");
         gets (m[i].apellido_medico);
         fflush (stdin);
         printf ("Ingrese el DNI del medico: ");
         gets (m[i].dni_medico);
         printf ("Ingrese la especialidad del medico: ");
         gets (m[i].especialidad);
         fflush (stdin);
         printf ("Ingrese el domicilio del medico: ");
         scanf ("%[^\n]", m[i].domicilio_medico);
         fflush (stdin);
         printf ("Ingrese el numero de consultorio del medico: ");
         gets (m[i].nro_consultorio);
         fflush (stdin);
         printf ("Ingrese el telefono del medico: ");
         gets (m[i].telefono_medico);
         fflush (stdin);
         printf (" Cuantos dias a la semana trabajara el medico: ");
         scanf ("%d", &cant_dias);
         for (int j=0;j<cant_dias;j++)
         {
             printf ("Ingrese el dia de la semana: ");
             scanf ("%s", &m[i].horario.dia[j]);
             fflush (stdin);
             printf ("Ingrese la hora de comienzo de la consulta para el dia %s: ", m[i].horario.dia[j]);
             scanf ("%d", &m[i].horario.hora_inicio[j]);
             printf ("Ingrese los minutos de comienzo de la consulta para el dia %s: ", m[i].horario.dia[j]);
             scanf ("%d", &m[i].horario.minutos_inicio[j]);
             printf ("Ingrese la hora de finalizacion de la consulta para el dia %s: ", m[i].horario.dia[j]);
             scanf ("%d", &m[i].horario.hora_finalizacion[j]);
             printf ("Ingrese los minutos de finalizacion de la consulta para el dia %s: ", m[i].horario.dia[j]);
             scanf ("%d", &m[i].horario.minutos_finalizacion[j]);
         }
     }
}
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 (cpp) [Seleccionar]

typedef struct {
        char nombre_medico [20];
        char apellido_medico [20];
        char dni_medico [8];
        char especialidad [20];
        char domicilio_medico [30];
        char nro_consultorio [2];
        char telefono_medico [15];
        /* Esto es 1 solo horario, necesitarias un arreglo */
        horario_atencion horario;
} medico;


Podrías querer algo asi:
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <iostream>
#include <string.h>

typedef struct {
        char dia [9];
        int hora_inicio;
        int minutos_inicio;
        int hora_finalizacion;
        int minutos_finalizacion;
        } horario_atencion;

typedef struct {
        char nombre_medico [20];
        char apellido_medico [20];
        char dni_medico [8];
        char especialidad [20];
        char domicilio_medico [30];
        char nro_consultorio [2];
        char telefono_medico [15];
        /* USAS UN ARREGLO DE HORARIOS */
        horario_atencion *horarios;
        } medico;

void alta_medico (medico m[], int &lim);

void alta_medico (medico m[], int &lim)
{
     int cant_dias;

     while (lim>50)
     {
           printf ("Cuantos medicos desea ingresar?");
           scanf ("%d", &lim);
     }

     for (int i=0;i<lim;i++)
     {
         printf ("Ingrese el nombre del medico: ");
         gets (m[i].nombre_medico);
         fflush (stdin);
         printf ("Ingrese el apellido del medico: ");
         gets (m[i].apellido_medico);
         fflush (stdin);
         printf ("Ingrese el DNI del medico: ");
         gets (m[i].dni_medico);
         printf ("Ingrese la especialidad del medico: ");
         gets (m[i].especialidad);
         fflush (stdin);
         printf ("Ingrese el domicilio del medico: ");
         scanf ("%[^\n]", m[i].domicilio_medico);
         fflush (stdin);
         printf ("Ingrese el numero de consultorio del medico: ");
         gets (m[i].nro_consultorio);
         fflush (stdin);
         printf ("Ingrese el telefono del medico: ");
         gets (m[i].telefono_medico);
         fflush (stdin);
         printf (" Cuantos dias a la semana trabajara el medico: ");
         scanf ("%d", &cant_dias);
         
         /* CREAS EL ARREGLO DE HORARIOS */
         m[i].horarios = new horario_atencion[cant_dias];       

         for (int j=0;j<cant_dias;j++)
         {
             printf ("Ingrese el dia de la semana: ");
             scanf ("%s", &m[i].horarios[j].dia);
             fflush (stdin);
             printf ("Ingrese la hora de comienzo de la consulta para el dia %s: ", m[i].horarios[j].dia);
             scanf ("%d", &m[i].horarios[j].hora_inicio);
             printf ("Ingrese los minutos de comienzo de la consulta para el dia %s: ", m[i].horarios[j].dia);
             scanf ("%d", &m[i].horarios[j].minutos_inicio);
             printf ("Ingrese la hora de finalizacion de la consulta para el dia %s: ", m[i].horarios[j].dia);
             scanf ("%d", &m[i].horarios[j].hora_finalizacion);
             printf ("Ingrese los minutos de finalizacion de la consulta para el dia %s: ", m[i].horarios[j].dia);
             scanf ("%d", &m[i].horarios[j].minutos_finalizacion);
         }
     }
}


Espero te sirva. Saludos