
La funzione feof in C serve a sapere se il file pointer si trova posizionato a fine file, ovvero testa la fine del file in un flusso.
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 alunni.txt con 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.
Ecco dunque il codice completo:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main() {
FILE *fp;
char cognome[20];
char nome[20];
int voto;
fp = fopen("alunni.txt", "rt");
if(!fp) {
printf("Errore nell'apertura del file");
exit(1);
}
while(!feof(fp)){
fscanf(fp,"%s %s %d\n", &cognome, &nome, &voto);
printf("cognome: %s, nome: %s, voto: %d\n", cognome, nome, voto);
}
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