Problema al compilar con struct

Iniciado por romybe, 5 Diciembre 2014, 02:38 AM

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

romybe

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]);
         }
     }
}

x64core

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?

leobr6

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