25/01/15 17:45
Sguaraus
Ho cambiato un po' di cose, ora non mi da errori di compilazione tuttavia l'esecuzione mi si blocca esattamente alla prima fread del ciclo while della 2° procedura. Salta fuori "errore di lettura 1" e si blocca
void inserimento(FILE *fp){ TPprodotto prodotto; TPprodmag *IT, *ITprev; int n=0; //lettura da file dei nuovi prodotti if((fp=fopen("articoliex.dat", "rb"))==NULL){ puts(" Impossibile aprire il file"); errore(); } while(!feof(fp)){ n=fread(&prodotto.codice, MAXS3, 1, fp); if(n!=0){ puts(" Errore di lettura 1"); errore(); } if((IT=malloc(sizeof(TPprodmag)))==NULL){ puts(" Impossibile allocare memoria"); errore(); } memset(IT, 0, sizeof(TPprodmag)); IT=magazzino; //finchè non si trova un codice uguale o non si è arrivati //a fondo lista while(prodotto.codice!=IT->codice || IT!=NULL){ ITprev=IT; IT=IT->next; } //aggiornamento prodotto if(IT!=NULL){ n=fread(&prodotto.scorta, MAXS3, 1, fp); if(n!=0){ puts(" Errore di lettura 5"); errore(); } IT->scorta=prodotto.scorta; } //nuovo prodotto else{ n=fread(prodotto.nome, MAXS2, 1, fp); if(n!=0){ puts(" Errore di lettura 2"); errore(); } n=fread(prodotto.categoria, MAXS1, 1, fp); if(n!=0){ puts(" Errore di lettura 3"); errore(); } n=fread(prodotto.provenienza, MAXS1, 1, fp); if(n!=0){ puts(" Errore di lettura 4"); errore(); } n=fread(&prodotto.scorta, MAXS3, 1, fp); if(n!=0){ puts(" Errore di lettura 5"); errore(); } n=fread(&prodotto.costo, MAXS3, 1, fp); if(n!=0){ puts(" Errore di lettura 6"); errore(); } IT->codice=prodotto.codice; strcpy(IT->nome, prodotto.nome); strcpy(IT->categoria, prodotto.categoria); strcpy(IT->provenienza, prodotto.provenienza); IT->scorta=prodotto.scorta; IT->costo=prodotto.costo; //inserimento in coda ITprev->next=IT; } } fclose(fp); }
Ultima modifica effettuata da Sguaraus 25/01/15 17:46
aaa