Hola!
Me da este error en tiempo de ejecución.
Código C:
Ver originaltypedef struct
{
unsigned short int ano, mes, dia, hora, min, seg;
}tipo_fecha;
//Tipo de dato usuario.
typedef struct
{
char login[21], password[21], nombre[21], apellido[42], ext[6];
tipo_fecha ult_reserva;
}tipo_usuario;
//Tipo de dato reserva
typedef struct
{
unsigned short int ocupado;
tipo_usuario usuario;
}tipo_reserva;
void consultar_reservas_mes(tipo_reserva *matriz_reservas)
{
int mes, dia, hora;
int tamanho;
tamanho=sizeof(tipo_reserva);
/*do
{
printf("\nNumero del mes a consultar: ");scanf("%d",&mes);
/*if ((mes>12) || (mes<1)) printf("\nNumero de mes no valido.\n");
else break;
}while(1);*/
mes=8;
printf("prueba 2 %d",&tamanho
);
//Recorro la matriz_reservas buscandos los unos en la matriz_reservas.ocupado e imprimo la reserva;
for (dia=0;dia<31;dia++) for (hora=0;hora<10;hora++)
{
if ( (matriz_reservas+(tamanho*10*30*mes)+(10*tamanho*dia)+(tamanho*hora))->ocupado!=0)
{
printf("\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n" ,dia,mes,hora,(matriz_reservas+(tamanho*12*30*mes)+(12*tamanho*dia)+(tamanho*hora))->usuario.nombre,
(matriz_reservas+(tamanho*10*30*mes)+(10*tamanho*dia)+(tamanho*hora))->usuario.apellido);
}
}
}
int main()
{
//Declaración de las variables
char basura;
unsigned short int mes,dia,hora;
char opcion,confirmacion;
char nombre[STRING_CORTO], password[STRING_CORTO];
tipo_usuario usuario;
tipo_fecha fecha;
//los índices de los arrays: mes,dia,hora
tipo_reserva matriz_reservas[12][31][12];
//Pongo todas las reservas a 0.
for (mes=0;mes<12;mes++) for (dia=0;dia<31;dia++) for (hora=0;hora<12;hora++) matriz_reservas[mes][dia][hora].ocupado=0;
do
{
printf("\nEscoja una opcion:\n"); printf("\n1 - Loguearse\n2 - Salir\n"); if (opcion==1)
{
if (/*login(usuario)*/1)
{
printf("\nLogueado correctamente\n"); do
{
opcion=menu();
switch(opcion)
{
case 1: introducir_datos(&usuario);
break;
case 2: consultar_reservas_mes(&matriz_reservas[0][0][0]);//Aquí es donde invoco la funcion
break;
case 3:
//consultar_reservas_usuario(matriz_reservas, usuario);
break;
case 4:
if (usuario.
nombre[0]==0) printf("\a\nIntroduzca primero sus datos\n\n"); else
{
do
{
printf("\nDatos de la reserva:\n Mes: ");scanf("%d",&fecha.
mes); printf(" Hora a reservar (de 8 a 20): ");scanf("%d",&fecha.
hora); if ((validar_fecha(fecha)) || ((fecha.hora<21) && (fecha.hora>7))) break;
else printf("\a\nFecha u hora incorrecta\n"); }while(1);
if (matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado==0)
{
printf("Realizar la reseva? (S/N): ");scanf("%s",&confirmacion
); if ((strcmp(&confirmacion
,"S")==0) || (strcmp(&confirmacion
,"s")==0)) {
matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado=1;
strcpy(matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
usuario.
nombre,usuario.
nombre); strcpy(matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
usuario.
apellido,usuario.
apellido); strcpy(matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
usuario.
ext,usuario.
ext); usuario.ult_reserva=fecha;
printf("\n\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n\n" ,fecha.dia,fecha.mes,fecha.hora,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido);
}
else printf("\nReserva no realizada\n"); }
else printf("\nFecha no disponible\n"); }
break;
case 5:
if (usuario.
nombre[0]==0) printf("\a\nIntroduzca primero sus datos\n\n"); else
{
do
{
printf("\nDatos de la reserva a borrar:\n Mes: ");scanf("%d",&fecha.
mes); if ((validar_fecha(fecha)) || ((fecha.hora<21) && (fecha.hora>7))) break;
else printf("\a\nFecha u hora incorrecta\n"); }while(1);
if (matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
ocupado==0) printf("\nNo hay ninguna reserva para esta fecha y esta hora\n"); else
{
if ((strcmp(matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
usuario.
nombre,usuario.
nombre)==0) && (strcmp(matriz_reservas
[fecha.
mes][fecha.
dia][fecha.
hora].
usuario.
apellido,usuario.
apellido)==0)) {
printf("\n\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n\n", fecha.dia,fecha.mes,fecha.hora,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,
matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido);
printf("Borrar la reseva? (S/N): ");scanf("%s",&confirmacion
); if ((strcmp(&confirmacion
,"S")==0) || (strcmp(&confirmacion
,"s")==0)) {
matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado=0;
printf("\nReserva borrada\n"); }
}
else printf("\nNo se puede borrar la reseva ya que el usuario actual no coincide con el de la reserva\n"); }
}
break;
case 6: break;
default: printf("\a\nOpcion incorrecta\n"); break;
}
}while(opcion!=6);
}
else printf("\a\n\nUsuario o Password incorrectos\n\n"); }
else if (opcion==2)
{
break;
}
else
{
printf("\a\nOpcion incorrecta\n"); }
}while(1);
printf("\nFIN DEL PROGRAMA\n\n"); }
No me llega ni a imprimir el "1" por pantalla. Llevo probado mil cosas y no sé. Empiezo a desesperarme. No he puesto todas las funciones que tengo pa no liar.
Venga, un saludo y muchas gracias por adelantado!