feof

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

Indice argomenti linguaggio C

Funzione fprintf

Funzione fscanf

Allocazione dinamica della memoria con malloc

Utilizzo di malloc in C

Typedef struct in C

Esempio sulle struct in C

Esercizio sulle struct in C

Esercitazione sulle struct in C

Realizzare un menù di scelta in C

Altro esempio sulle struct in C

Strutture complesse in C

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *