Oggi svolgeremo un semplice esercizio sui file in C per esercitarci con le funzioni appena studiate, prima di proseguire oltre.
Creare una semplice struct paesi che contiene il nome del paese, la regione e il numero di abitanti. Scrivere quindi un programma in C, che dichiara una tabella p di tipo paesi, apra in scrittura un file di testo di nome “media.dat” e inserisca i dati di 4 paesi. Al termine visualizzare la media degli abitanti.
Controlliamo sempre che non ci siano errori per l’apertura del file con l’istruzione if((fp=fopen(“media.dat”, “wt”))==NULL) e diamo un messaggio di errore se il puntatore restituisce il valore NULL.
Ricordiamo inoltre che con la modalità w si crea un nuovo file e se già esiste con lo stesso nome esso viene sovrascritto.
Con un ciclo for inseriamo i dati e a mano a mano li sommiamo nella variabile media, precedentemente inizializzata a zero.
Infine calcoliamo la media e visualizziamo il risultato così ottenuto.
Ecco dunque il listato completo dell’esercizio sui file in C.
#include <stdio.h>
#include <stdlib.h>
#define N 4
typedef struct {
char paese[30];
char regione[20];
int abitanti;
}paesi;
int main() {
FILE *fp;
int i;
paesi p[N];
float media=0;
if((fp=fopen("media.dat", "wb"))==NULL) {
printf("Errore nell'apertura del file'");
exit(1);
}
for(i=0;i<N;i++) {
printf("paese: ");
scanf("%s", p[i].paese);
printf("regione: ");
scanf("%s", p[i].regione);
printf("Abitanti: ");
scanf("%d", &p[i].abitanti);
fflush(stdin);
fprintf(fp,"%s %s %d\n", p[i].paese, p[i].regione, p[i].abitanti);
media+=p[i].abitanti;
}
fclose(fp);
media/=N;
printf("La media degli abitanti e': %10.2f \n", media);
return 0;
}
Lo stesso esercizio si poteva facilmente risolvere anche con l’uso delle funzioni.
Questo è un semplice esercizio sui file in C utile ad approfondire le funzioni fopen() e fprintf() precedentemente studiate e le strutture in C.
Alcuni link utili
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice