libri-javascript-python

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:

#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

Indice argomenti linguaggio C

La funzione fopen

Funzione fscanf

Allocazione dinamica della memoria con malloc

Realizzare un menù di scelta in C

Strutture complesse in C

Come sommare gli elementi della cornice esterna

Insertion Sort in C