Proponiamo ancora degli esercizi sui file in C ed in particolare sulle funzioni fopen, fwrite, fread e fclose.
Propongo questo esempio a scopo di introdurre, prossimamente, altre funzioni che ci permetteranno di posizionarci in una posizione qualunque del file e che quindi garantiscono un accesso diretto e non più sequenziale.
Esercizi sui file in C - problema
In un file binario sono memorizzati i dati di un vettore che contiene al massimo 50 elementi. Stampare i dati di questo file, se presenti, altrimenti dare come messaggio: "Nessun dato presente!". Dopo chiedere quanti dati si vogliono aggiungere al vettore e creare una funzione che consenta di farlo. Creare un'altra funzione per il salvataggio di questi dati nel vettore. Infine ristampare nuovamente i dati del file aggiornati con il nuovo inserimento.
Le funzioni/procedure utilizzate sono dunque 4. Notate come la funzione init deve restituire un intero che corrisponde al numero di elementi che vengono inseriti nel vettore. Mentre le altre procedure non ritornano alcun valore.
Fondamenti solidi di programmazione
Impara le basi della programmazione in C in modo semplice, pratico ed efficace. Variabili, cicli, funzioni, logica e algoritmi.
⏱️9 ore di corso registrato
🧩Più di 50 algoritmi risolti passo passo
🎯Livello base
💻100% online, fruibile quando vuoi
Quindi la funzione init ha il compito di aprire in lettura il file binario, utilizzando fopen, e se l'operazione ha successo legge gli elementi in esso presenti utilizzando la funzione fread. Se non ci sono dati verrà stampato un messaggio: Nessun dato presente! Dopo chiudiamo il file binario con la funzione fclose.
La procedura print stampa semplicemente i dati presenti senza restituire alcun valore. Prende come parametri il vettore e il numero degli elementi.
La procedura add ha il compito di aggiungere gli elementi e quindi ha la necessità di prendere come parametri non solo il vettore ma anche il puntatore all'ultimo elemento inserito. Quindi chiediamo quanti elementi inserire e li aggiungiamo a quelli precedenti. Potremmo fare anche un controllo per far in modo che non si inseriscano più elementi rispetto alla dimensione massima dichiarata, che in questo caso è 50.
Infine la procedura save si occupa di salvare i dati inseriti nel file.
Ecco dunque il listato completo:
#include <stdio.h>
#define N 50
int init(int*V);
void print(int *V,int n);
void add(int *V,int *pn);
void save(int *V,int n);
void main(){
int a[N],i,n;
n=init(a);
print(a,n);
add(a,&n);
save(a,n);
printf("Ristampo i dati contenuti nel file con l'aggiunta");
print(a,n);
}
int init(int *V){
FILE *pf;
int i=0;
pf=fopen("vettori.dat","rb");
if(pf)
while(fread(&V[i],sizeof(int),1,pf)>0 && i<N)
i++;
else
printf("Nessun dato presente!");
fclose(pf);
return i;
}
void print(int *V, int n){
int i;
printf("\nElementi totali presenti: %d\n", n);
for(i=0;i<n;i++)
printf("%d\n", V[i]);
}
void add(int *V,int *pos){
int x,i;
printf("Elementi da aggiungere (max %d): ", N-*pos);
scanf("%d",&x);
for(i=*pos;i<*pos+x;i++){
printf("Numero %d: ", i+1);
scanf("%d",&V[i]);
};
*pos+=x;
}
void save(int *V,int n){
FILE *pf;
pf=fopen("vettori.dat","wb");
if(pf)
fwrite(V,sizeof(int),n,pf);
else
printf("Errore in scrittura\n");
}
Questi sono solo alcuni degli esercizi sui file in C che vi propongo in questo semplice tutorial.
Un'email ogni tanto con i nuovi articoli e le guide — niente spam, ti disiscrivi quando vuoi.
🍪 Questo sito usa i cookie
Utilizziamo cookie tecnici necessari al funzionamento e, previo tuo consenso, cookie
analitici e di terze parti per migliorare l'esperienza di navigazione.
Leggi la Cookie Policy e la
Privacy Policy.