[C con Clase] Error al ejecutar un programa

Javier Cancio del Busto sepholin en gmail.com
Lun Mayo 26 22:46:21 CEST 2008


Buenas! Estoy haciendo un programa para clase, y he llegado un punto en el
que al ejecutarlo e introducir un dato, se me cuelga. Tras varios testeos
llegué a la conclusión de que la función que genera ese error es la
siguiente:


/******
*    Partiendo de un NIF, que no es otra cosa que una cadena de caracteres
(totalmente validado), recorre unos ficheros en busca de una fecha, y si la
fecha actual
*    es mayor que un mes de la que figura en el registro, se sanciona.
*
****************/

void  Sancionar_Usuario (NIF dni_existente) {

    reg_prestamo rp;
    Reg_clientes rc;
    FILE *FP;
    FILE *FC;



    int dia, mes, anyo, dia_actual, mes_actual, anyo_actual, sancion=0;
    int encontrado=0, ecliente=0;
    Fecha actual;

    // Si pongo aqui un printf no llega a ejecutarse, por lo que supuse que
el error lo daria antes

    if ((FP=fopen("prestamos.dat", "rb"))==NULL) exit(0);


    genera_fecha(actual); // Guarda en Fecha (que es una cadena de
caracteres) la fecha actual.

    while(!encontrado && fread(&rp, sizeof(rp), 1, FP))
        if(strcmp(rp.NIFcliente, dni_existente)==0)
            encontrado=1;


    if(encontrado==1){

    dia=(rp.fecha_prestamo[0]-'0')*10+(rp.fecha_prestamo[1]-'0');
    mes=(rp.fecha_prestamo[2]-'0')*10+(rp.fecha_prestamo[3]-'0');

anyo=(rp.fecha_prestamo[4]-'0')*1000+(rp.fecha_prestamo[5]-'0')*100+(rp.fecha_prestamo[6]-'0')*10+(rp.fecha_prestamo[7]-'0');

    dia_actual=(actual[0]-'0')*10+(actual[1]-'0');
    mes_actual=(actual[2]-'0')*10+(actual[3]-'0');

anyo_actual=(actual[4]-'0')*1000+(actual[5]-'0')*100+(actual[6]-'0')*10+(actual[7]-'0');

    if(anyo_actual>anyo)
        sancion=1;

    if(mes_actual>mes+1)
        sancion=1;

    if(mes_actual=mes+1)
        if(dia_actual>dia)
            sancion=1;
    }


    if(sancion==1){

    if ((FC=fopen("clientes.dat", "rb"))==NULL)    exit(0);


    while(!ecliente && fread(&rc, sizeof(rc), 1, FC))
        if(strcmp(dni_existente, rc.NIFcliente)==0)
            ecliente=1;


        rc.sancionado=1;
    }


    fclose(FP);
    fclose(FC);



}



Muchas gracias por vuestra ayuda!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080526/6b5100b2/attachment.html>


Más información sobre la lista de distribución Cconclase