Sviluppiamo un algoritmo che calcola il massimo tra numeri letti da un file, usando le funzioni fopen(), fscanf(), fclose() e feof().
Quindi mettiamo in pratica le funzioni che abbiamo studiato nelle precedenti lezioni.
Scrivere quindi un programma in C che apre in lettura un file di testo di nome “numeri.txt” che contiene dei valori numerici. Dopo aver controllato possibili errori di apertura del file, il programma deve calcolare il valore massimo di tutti i numeri presenti nel file.
Innanzitutto apriamo in lettura (r) il file di nome numeri.txt con la funzione fopen. Diamo quindi un messaggio di errore di apertura file se il puntatore restituisce il valore NULL. In questo caso l'errore si può presentare se ad esempio il file che si tenta di aprire non esiste.
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
Prendiamo il primo elemento del nostro file e lo assegniamo alla variabile max:
if(!feof(fp)) fscanf(fp,"%d\n", &max);
Ricordiamo che fscanf è la funzione che permette di leggere da un file in modo formattato.
Quindi scorriamo tutto il file andando a leggere il valore numerico. Se il valore che leggiamo è maggiore del nostro valore max allora lo sostituisco.
Infine chiudiamo il file con fclose e visualizziamo in output il numero massimo.
Ecco dunque il listato completo del programma per il calcolo del massimo tra numeri letti da un file:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main() {
FILE *fp;
int max, voto;
if((fp=fopen("numeri.txt", "rt"))==NULL) {
printf("Errore nell'apertura del file'");
exit(1);
}
//prende il primo elemento e lo inserisce in max
if(!feof(fp))
fscanf(fp,"%d\n", &max);
//scorre gli altri elementi e li confronta con il massimo
while(!feof(fp)){
fscanf(fp,"%d\n", &voto);
if (voto>max)
max=voto;
}
printf("voto: %d\n", max);
fclose(fp);
return 0;
}
Ecco lo stesso esercizio sviluppato utilizzando la funzione max_file:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int max_file(char *nomefile, int *max) {
FILE *fp;
int voto;
if((fp=fopen(nomefile, "r"))==NULL) {
printf("Errore nell'apertura del file'");
exit(1);
}
//prende il primo elemento e lo inserisce in max
if(!feof(fp))
fscanf(fp,"%d\n", max);
while(!feof(fp)){
fscanf(fp,"%d\n", &voto);
if (voto>*max)
*max=voto;
}
fclose(fp);
return 1;
}
void main() {
int massimo;
max_file("numeri.txt", &massimo);
printf("il massimo: %d", massimo);
}
Chiaramente questa è solo una possibile soluzione all'algoritmo per il calcolo del massimo tra numeri letti da un file.
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.