Leggere un carattere da un file, funzione fgetc

Una volta aperto un file in C con la funzione fopen, è possibile leggere un carattere (unsigned char) da tale file usando la funzione fgetc. Di seguito viene riportata la sua sintassi:


 
int fgetc(FILE *fp);


dove fp è il puntatore al file su cui effettuare l’operazione di lettura, ottenuto a seguito della chiamata della funzione fopen. La funzione fgetc restituisce un intero, in caso di successo viene ritornato il carattere letto (ricordando che ogni carattere ha un valore intero associato secondo la tabella ASCII), mentre in caso di errore viene restituito -1, o EOF.

Esempio lettura di un carattere da un file con fgetc

Di seguito viene riportato un esempio in cui, grazie alla funzione fgetc, il programma è in grado di leggere il testo contenuto all’interno di un file, leggendo un carattere alla volta.


Prima di tutto dobbiamo, come al solito, aprire il file usando la funzione fopen e verificare che il puntatore non sia NULL. Successivamente possiamo leggere i caratteri contenuti all’interno del file, ma dato che fgetc può leggere un carattere alla volta, possiamo utilizzare un ciclo while contenente la funzione feof in modo da continuamente chiamare la fgetc fino a che non è stata raggiunta la fine del file. Il valore ritornato dalla fgetc lo memorizziamo all’interno di una variabile di tipo char, che verrà stampata a schermo ad ogni iterazione del ciclo while. Una volta effettuate tutte le operazioni sul file dobbiamo ricordarci di chiuderlo usando la funzione fclose.


 
#include <stdio.h>

void main(){
    char c;
    FILE *fptr;

    fptr = fopen("test.txt", "r");

    if(fptr == NULL){
        printf("Errore durante l'apertura del file!\n");
    } else {
        while(!feof(fptr)){
            c = fgetc(fptr);
            printf("%c ", c);
        }
    }

    fclose(fptr);
}


Output: C i a o m o n d o !

Per evitare alcuni problemi può risultare importante, memorizzare il valore ritornato dalla fgetc in una variabile di tipo intera, verificare che tale valore sia diverso da -1 e successivamente stampare a schermo il carattere letto. Infatti, in caso di errore di lettura la funzione fgetc restituisce -1, però tale valore non è associato ad alcun valore di tipo char, in quanto la tabella ASCII inizia dal valore intero 0.

Indice pagine linguaggio C: