Proponiamo oggi alcuni esercizi su file e strutture in C. Utilizzeremo i file binari e le funzioni fclose, fopen, fread e fwrite.
Esercizi su file e strutture in C
Il primo esercizio che svolgeremo è una variazione dell’esercizio precedente, proponiamo in aggiunta l’uso delle funzioni, così da approfondirne l’uso.
Creare una struct studente che contiene la matricola, il nome, il cognome e il voto. Creare una funzione/procedura per l’inserimento dei dati e un’altra per la stampa degli studenti inseriti. I dati saranno inseriti e letti in un file binario di nome student.dat.
Innanzitutto creiamo la struct come richiesta nel problema sopra. Dopo creiamo i prototipi delle funzioni che utilizzeremo per inserire e stampare i dati. Entrambe le funzioni prendono come parametro il file pointer, cioè il puntatore al file restituito dalla funzione fopen.
Apriamo il file binariostudent.dat in scrittura e se non ci sono problemi nell’apertura richiamiamo la procedura insert che si occupa di richiedere e registrare i dati in input.
Dopo occorre riaprire il file binario in lettura e verificare che l’apertura non abbia prodotto problemi. Quindi si invoca la procedura print che provvederà a stampare i campi inseriti precedentemente in input.
Notate che la chiusura del file, con fclose, avviene ovviamente sia dopo aver inserito i dati, sia dopo la stampa dei dati. Infatti il file viene aperto due volte, prima in scrittura e poi in lettura.
Ecco dunque il listato completo:
HP Pro Desk, Pc Desktop Pronto All'Uso, Computer Pc Fisso Intel i5, Ram 16Gb, SSD 512Gb, Pacchetto Office 2021, Windows 11 Pro (Ricondizionato)
150,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)HP 640 G2, Pc Portatile Notebook intel core i5-6th, Display 14", Ram 16Gb, SSD 512Gb, Pacchetto Libre, W10 (Ricondizionato)
229,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)LENOVO, pc desktop pronto all'uso, computer pc fisso intel i5, ram 16gb, ssd 512gb, pacchetto libre, W10 (Ricondizionato)
138,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nome[20];
char cognome[20];
int voto;
int id;
} studente;
void insert(FILE *pf); //prototipo funzione
void print(FILE *pf); //prototipo funzione
void main(void){
FILE *pf;
pf=fopen("student.dat","wb");
if(pf){
insert(pf);
fclose(pf);
}
else
printf("Errore in scrittura\n");
pf=fopen("student.dat","rb");
if(pf) {
print(pf);
fclose(pf);
}
else
printf("Errore in lettura");
}
void insert(FILE *pfile){
studente s;
printf("\nInserisci Matricola:");
scanf("%d",&s.id);
printf("Inserisci il cognome:");
scanf("%s",s.cognome);
printf("Inserisci il nome:");
scanf("%s",s.nome);
printf("Inserisci il voto:");
scanf("%d",&s.voto);
fwrite(&s,sizeof(s),1,pfile);
}
void print(FILE *pfile){
studente st;
fread(&st,sizeof(studente),1,pfile);
printf("\nMatricola: %d\n",st.id);
printf("Cognome: %s\n",st.cognome);
printf("Nome: %s\n",st.nome);
printf("Voto: %d\n",st.voto);
}
Questo era uno degli esercizi su file e strutture in C, nella prossima lezione ne proporrò degli altri.
Alcuni link utili
Allocazione dinamica della memoria con malloc
Realizzare un menù di scelta in C