Estoy aprendiendo a modular código en c y en el código que les dejo a continuación me da el siguiente error. Error: nombre de tipo desconocido ‘Fecha’, en las líneas 3:14 y 3:28.-
Dentro del mismo archivo siempre pase de esta manera las estructuras a funciones o cuando es muy grande con una variable puntero, pero en este caso me da error.-
Código
#include <stdio.h> #include <windows.h> #include <time.h> #include "fechaDifDias.c" #define MENSAJE printf( "\n\n Pulse [Enter] para continuar..." ); getchar(); typedef struct{ int orden; char b; char fecha[11]; float verduras; float almacen; char nota[101]; }Super; typedef struct{ int dia; int mes; int anio; }Fecha; int mainMenu(void); void contarRegistros( FILE *ptrFile, Super *super, int *registros, int tamStructSuper ); void rellenar_estructura(FILE *ptrFile, Super *super, int *opcRe); void escribir_archivo(FILE *ptrFile, Super *super, int tamStructSuper, int registros); void leer_archivo(FILE *ptrFile, Super *super, int registros, int cualLeer, int tamStructSuper); void buscar(FILE *ptrFile, Super *super, int tamStructSuper, int *contarReg, int *cualLeer); int resBusqueda(Super *super); void consultation(FILE *ptrFile, Super *super, int tamStructSuper); int validarFechas( Fecha inicio, Fecha final, Fecha consulta ); void feDiDi( Fecha inicio, Fecha final, int *totalDias ); int main(void){ mainMenu(); return 0; } int mainMenu(void){ Super super = {0}; int ok, ch, opcMp, registros, contarReg=1, cualLeer=1, opcRe; int tamStructSuper = sizeof(int) + sizeof(char) + (sizeof(char)*11) + sizeof(float) + sizeof(float) + (sizeof(char)*101); FILE *ptrFile; return 1; } while( opcMp != 8){ do{ if( contarReg == 1 ){ contarRegistros( ptrFile, &super, ®istros, tamStructSuper ); leer_archivo( ptrFile, &super, registros, cualLeer , tamStructSuper); contarReg = 0; cualLeer = 1; } }while(!ok); switch(opcMp){ case 1 : if( registros >= 1){ buscar(ptrFile, &super, tamStructSuper, &contarReg, &cualLeer); }else{ MENSAJE; } break; case 2 : rellenar_estructura( ptrFile, &super, &opcRe ); if( opcRe == 1 ){ super.b = '+'; escribir_archivo(ptrFile, &super, tamStructSuper, registros); contarReg = 1; } break; case 3 : break; case 4 : break; case 5 : consultation( ptrFile, &super, tamStructSuper ); contarReg = 1; break; case 6 : break; case 7 : break; } } return 0; } void contarRegistros( FILE *ptrFile, Super *super, int *registros, int tamStructSuper ){ } void rellenar_estructura(FILE *ptrFile, Super *super, int *opcRe){ int ch, ok; char *p = NULL; char fecha[11]; do{ *p='\0'; } else{ } if( ok != 10 || super->fecha[2] != '/' || super->fecha[5] != '/'){ ok = 0; } }while(ok !=10); do{ }while(!ok); do{ }while(!ok); *p='\0'; } else{ } do{ }while(!ok); } void escribir_archivo( FILE *ptrFile, Super *super, int tamStructSuper, int registros ){ super->orden = registros + 1; } void leer_archivo( FILE *ptrFile, Super *super, int registros, int cualLeer, int tamStructSuper ){ float total = 0.0; if(cualLeer == 1){ if( super->orden == registros){ } } } total = super->verduras + super->almacen; printf( "\n %11s %12.2f %10.2f %9.2f (total movimientos..: %d)", super->fecha, super->verduras, super->almacen, total, registros ); } void buscar(FILE *ptrFile, Super *super, int tamStructSuper, int *contarReg, int *cualLeer){ char pBuscar[11], *p = NULL; int ch, ok, opcion; do{ *p='\0'; } else{ } if( ok != 10 || pBuscar[2] != '/' || pBuscar[5] != '/'){ ok = 0; } }while(!ok); ok=0; ok++; opcion = resBusqueda( super ); if( opcion == 1 ){ *contarReg = 1; *cualLeer = 2; } else if( opcion == 3 ){ *contarReg = 1; *cualLeer = 1; } break; } } if( ok == 0){ MENSAJE; } } int resBusqueda( Super *super ){ float totalBus; int opcionEnc, ch, ok; totalBus = super->verduras + super->almacen; do{ }while(!ok); return opcionEnc; } void consultation(FILE *ptrFile, Super *super, int tamStructSuper){ Fecha inicio; Fecha final; Fecha consulta; int ok, vFecha, ch, totalDias=0; float totalVer = 0.00, totalAlm = 0.00, subTotal = 0.00, totalCon = 0.00; ok=0; vFecha = validarFechas( inicio , final, consulta ); if( vFecha == 1 ){ ok++; totalVer += super->verduras; totalAlm += super->almacen; subTotal = super->almacen + super->verduras; totalCon += subTotal; } } if( ok > 0 ){ feDiDi( inicio, final, &totalDias ); }else{ } MENSAJE; } int validarFechas( Fecha inicio, Fecha final, Fecha consulta ){ unsigned long _inicio = (inicio.anio * 365) + (inicio.mes * 28) + inicio.dia; unsigned long fin = (final.anio * 365) + (final.mes * 28) + final.dia; unsigned long fecha = (consulta.anio * 365) + (consulta.mes * 28) + consulta.dia; if( fecha >= _inicio && fecha <= fin ){ return 1; }else{ return 0; } }
Código
Es todo y espero como siempre de vuestra ayuda.-
int numeroBisiestos( int anio ); void feDiDi( Fecha inicio, Fecha final, int *totalDias ){ int totalDiasAnio[] = {00,31,59,90,120,151,181,212,243,273,304,334,365}; int difAnio=0, i; difAnio = final.anio - inicio.anio; if( difAnio == 0){ *totalDias += (totalDiasAnio[final.mes-1] + final.dia) - (totalDiasAnio[inicio.mes-1] + inicio.dia); if( inicio.mes <= 2 && final.mes > 2) {*totalDias += numeroBisiestos(inicio.anio);} } else{ *totalDias += 365 - (totalDiasAnio[inicio.mes-1] + inicio.dia); if( inicio.mes < 3) {*totalDias += numeroBisiestos(inicio.anio);} for( i= inicio.anio +1; i< final.anio; i++ ){ *totalDias += 365 + numeroBisiestos(i); } *totalDias += totalDiasAnio[final.mes-1] + final.dia; if( final.mes > 2) {*totalDias += numeroBisiestos(final.anio);} } } int numeroBisiestos( int anio ){ if((anio %4 == 0 && anio%100 != 0) || (anio%400) == 0){return 1;} else{return 0;} }
Saludos.
Daniel