La funzione feof in C è utilizzata per determinare se il file pointer si trova alla fine del file. In altre parole, questa funzione verifica se è stato raggiunto il termine del flusso di dati all’interno di un file.
La sintassi della funzione è dunque la seguente:
int feof(FILE *fp)
La funzione feof ritorna 0 se non è stata raggiunta la fine del file, altrimenti restituisce un valore diverso da zero.
Esempio di utilizzo di feof
Modifichiamo l’esempio affrontato nella lezione precedente, dove abbiamo utilizzato un ciclo for per leggere i dati.
Supponiamo di avere un file di nome alunni.txt che contiene i seguenti dati di esempio:
mario rossi 8
giulio verdi 9
Quindi questa volta utilizziamo un ciclo while, in quanto, non sappiamo esattamente quante volte verrà ripetuto il ciclo, dobbiamo fermarci quando si raggiunge la fine del file.
È sempre buona pratica controllare il numero di elementi letti da fscanf
per assicurarsi che corrisponda alle aspettative.
Ecco dunque il codice completo:
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LENGTH 20
int main() {
FILE *fp;
char cognome[MAX_STRING_LENGTH];
char nome[MAX_STRING_LENGTH];
int voto;
fp = fopen("alunni.txt", "rt");
if(!fp) {
printf("Errore nell'apertura del file");
exit(1);
}
while (!feof(fp)) {
if (fscanf(fp, "%19s %19s %d", cognome, nome, &voto) == 3) {
printf("Cognome: %s, Nome: %s, Voto: %d\n", cognome, nome, voto);
} else if (feof(fp)) {
// Il flag EOF è settato, ma non è un errore
break;
} else {
// Si è verificato un errore durante la lettura
perror("Errore durante la lettura del file");
break;
}
}
fclose(fp);
return 0;
}
Attenzione, conviene quindi utilizzare questa funzione che è nata proprio per questo scopo.
Infatti potremmo ottenere lo stesso risultato utilizzando altre funzioni, ma per i file binari può succedere che una sequenza di informazioni possa essere scambiata come costante EOF, segnando erroneamente la fine del file.
Quindi meglio utilizzare la funzione feof, appositamente creata dal C.
Alcuni link utili
Allocazione dinamica della memoria con malloc
Esercitazione sulle struct in C
Realizzare un menù di scelta in C
Altro esempio sulle struct in C
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