Ciao a tutti, nell'esercitazione scolastica che sto sviluppando (Linguaggio C in teoria, ma ai prof va bene che compiliamo codice misto C/C++) ho la necessità di "rimuovere logicamente" (tramite un campo nella struct) dei campi.

Il codice che ho scritto:
codice:
struct movimento
{
  char nome[42];
  char prestazione[42];
  char data[12];
  bool visible;
  bool ripetizione; /*se deve essere ripetuta*/
};


int removeAllMovementDate(char date[])
{
    int max=julianDate(date); /*giorno giuliano della data inserita*/
    getchar();
    int now;
    int flag =0;
    char app[11];
    FILE *fp; 
    struct movimento rec;  
    fp=fopen("filemovimenti.dat", "r+b");/*Apertura file in modalita lettura e binario*/
    if(fp==NULL)
    {
        printf("\n Errore di apertura file \n");
        return(-1);
        getchar();
    }
    PuliziaBuffer();
    fread(&rec,sizeof(struct movimento),1,fp);    
    while(!feof(fp))
    {
        /*omettendo questa riga il problema non si presenta*/
        now=julianDate(app); /*giorno giuliano del movimento attuale*/
        if((rec.visible==true)&&(now<max))  /*se il movimento non è nascosto ed è precedente alla data*/
            {
                rec.visible=false;    /*rendo il movimento non visibile */  
                fseek(fp,-sizeof(struct movimento),SEEK_CUR);/*sposto il puntatore indietro di un record*/
                fwrite(&rec,sizeof(struct movimento),1,fp);  /*e sovrascrivo*/
                 
            }       
        fread(&rec,sizeof(struct movimento),1,fp);
    }
    fclose(fp);
    printf("\n Sovrascrittura eseguita correttamente."); /*messaggio di avviso*/
    return(0);
}
La funzione julianDate è la seguente
codice:
int julianDate(char *data)
         { //restutisce quanti giorni sono passati dal 01/01/4713 a.C.            
             char *cday,*cmonth,*cyear;
             char separatore[]=" / - \ ";
             cday=strtok(data,separatore);/*acquisico i numeri come stringhe*/
             cmonth=strtok(NULL,separatore);
             cyear=strtok(NULL,separatore);
             int d =atoi(cday); /*converto in interi*/
             int m = atoi(cmonth);
             int y1 = atoi(cyear);
             int a,y,l;
             a=(14-m)/12;
             y=y1+4800-a;
             l=m+12*a-3;
             return (d+(153*l+2)/5+365*y+y/4-y/100+y/400-32045);
         }
Il problema è il seguente: andando a richiamare la funzione, va in loop nel ciclo
codice:
while(!feof(fp))
    {
        /*omettendo questa riga il problema non si presenta*/
        now=julianDate(app); /*giorno giuliano del movimento attuale*/
        if((rec.visible==true)&&(now<max))  /*se il movimento non è nascosto ed è precedente alla data*/
            {
                rec.visible=false;    /*rendo il movimento non visibile */  
                fseek(fp,-sizeof(struct movimento),SEEK_CUR);/*sposto il puntatore indietro di un record*/
                fwrite(&rec,sizeof(struct movimento),1,fp);  /*e sovrascrivo*/
                 
            }       
        fread(&rec,sizeof(struct movimento),1,fp);
    }
Il problema potrebbe potrebbe essere nella funzione julianDate? La utilizzo anche in altri ambiti ma non da problemi (ho notato che rovina il parametro passato).

Grazie in anticipo per l'aiuto