Concetti Chiave
- Il programma apre due file binari: uno per leggere numeri naturali e l'altro per aggiornare i record.
- Utilizza una struttura dati chiamata 'prova' che contiene due campi interi, campo1 e campo2.
- Per ogni numero letto dal primo file, il programma cerca il record corrispondente nel secondo file.
- Se il campo1 del record è dispari, incrementa il campo2 di un'unità.
- Il programma gestisce errori nell'apertura dei file e chiude correttamente entrambi i file al termine delle operazioni.
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);
}
Aggiornamento dei record
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;
}
Domande da interrogazione
- Qual è lo scopo principale del programma C descritto nel testo?
- Come viene gestito l'aggiornamento dei record nel secondo file binario?
- Quali sono le operazioni di file handling utilizzate nel programma?
Il programma C legge un file binario di numeri naturali e aggiorna un secondo file binario incrementando il campo2 di un record se il campo1 è dispari.
Per ogni numero letto dal primo file, il programma cerca la posizione corrispondente nel secondo file, legge il record, verifica se campo1 è dispari e, in tal caso, incrementa campo2 di una unità.
Il programma utilizza fopen per aprire i file, fread per leggere i dati, fseek per posizionarsi nel file, fwrite per scrivere i dati aggiornati e fclose per chiudere i file.