Leggere da un file, funzione fscanf

Una volta aperto un file con la funzione fopen, è possibile leggere il contenuto di quel file utilizzando la funzione fscanf che rappresenta una versione più generale della funzione scanf, infatti permette di specificare lo stream da cui leggere i dati. La sintassi della funzione fscanf è la seguente:


 
int fscanf(FILE *fptr, char *formato, argomenti ...);


dove il puntatore fptr indica lo stream da cui leggere i dati, mentre gli altri parametri sono analoghi a quelli della funzione scanf. Analogamente alla fprintf, anche la funzione fscanf restituisce un valore intero, e se maggiore o uguale a zero, indica il numero dei campi che sono stati convertiti e assegnati correttamente, mentre restituisce valore -1, o EOF, in caso di errore durante l’operazione di lettura.

NOTA: la funzione fscanf può essere utilizzata anche per leggere dall’input standard utilizzando lo stream stdin.

Esempio lettura da file con funzione fscanf

Nel seguente esempio useremo la funzione fscanf per leggere il contenuto del file definito nella pagina precedente, dove grazie alla funzione fprintf avevamo scritto “Hello world!” sul file intitolato test.txt.


Per poter leggere dal file usando la fscanf dobbiamo usare gli specificatori di formato corretti in base al tipo di dato che il file contiene. In questo caso il file contiene due stringhe, quindi possiamo utilizzare lo specificatore %s sia per la prima parola, sia per la seconda. Definito il formato dei dati, dobbiamo specificare le variabili in cui memorizzare i valori letti, dato che si trattano di due stringhe definiamo due array di tipo char specificando anche la loro dimensione. A questo punto non resta che aprire il file tramite la funzione fopen, controllare che il puntatore non sia NULL e dopodichè possiamo chiamare la funzione fscanf con i giusti parametri. Successivamente possiamo visualizzare il contenuto estratto dal file, stampando a schermo, usando la printf, o volendo la fprintf specificando come stream lo stdout, i due array di tipo char. Al termine delle operazioni sul file dobbiamo chiuderlo chiamando la funzione fclose.


 
#include <stdio.h>

void main(){
    char parola_1[50], parola_2[50];
    FILE *fptr;

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

    if(fptr == NULL){
        printf("Errore durante l'apertura del file!\n");
    } else {
        fscanf(fptr, "%s%s", &parola_1, &parola_2);
        printf("%s %s", parola_1, parola_2);
    }

    fclose(fptr);
}


Output: Hello world!

Dato che la fscanf restituisce un valore intero pari al numero di campi assegnati correttamente, possiamo stampare tale valore utilizzando una variabile intera.


 
int x = fscanf(fptr, "%s%s", &parola_1, &parola_2);
printf("%d", x);


Output: 2

Infatti i campi usati sono parola_1 e parola_2.

Indice pagine linguaggio C: