Concetti Chiave
- Il programma in C legge un file binario di numeri naturali e aggiorna un secondo file binario in base ai numeri letti.
- Il secondo file contiene record strutturati con due campi interi, 'campo1' e 'campo2'.
- Se 'campo1' di un record è dispari, il programma incrementa di uno 'campo2' dello stesso record.
- Utilizza la funzione fseek per posizionarsi al record corretto nel secondo file, basato sul numero letto dal primo file.
- Il programma include controlli di errore per l'apertura dei file e chiude correttamente entrambi i file al termine.
Scrivi un pgm C che legge un file binario di numeri naturali e, per ogni numero n letto, aggiorna il record di posizione (relativa) n-esima di un secondo file binario. Il tracciato record del secondo file è:
typedef struct{
int campo1;
int campo2;
}prova;
L’aggiornamento consiste nell’incrementare di una unità il
campo2 se il campo1 è dispari.
typedef struct{
int campo1;
int campo2;
}prova;
int main()
{
FILE *fpInteri;
FILE *fpRec;
prova rec;
int num;
fpInteri=fopen("interi.dat","rb");
if(fpInteri == NULL)
{
printf("Errore nella apertura del file di lettura");
getchar();
exit(1);
}
fpRec=fopen("record.dat","r+b");
if(fpRec == NULL)
{
printf("Errore nella apertura del file di update");
getchar();
exit(1);
}
while(fread(&num,sizeof(int),1,fpInteri))
{
fseek(fpRec,num*sizeof(rec),SEEK_SET);
fread(&rec,sizeof(rec),1,fpRec);
if(rec.campo1%2==1)
{
rec.campo2++;
fseek(fpRec,-1L*sizeof(rec),SEEK_CUR);
fwrite(&rec,sizeof(rec),1,fpRec);
}
}
fclose(fpInteri);
fclose(fpRec);
getchar();
return 0;
}