In questa lezione parleremo di fscanf in C, cioè della funzione che serve a leggere da un file in modo formattato, chiaramente dopo l’apertura con fopen.
Nella lezione precedente abbiamo studiato la funzione fprintf che serve a scrivere sui file e abbiamo detto che è molto simile a printf.
Corso di C
Cosa troverai in questo corso base
- Introduzione al linguaggio
- Spiegazione dei concetti di teoria
- Spiegazione degli esercizi passo passo
- Materiale da poter scaricare
Corso di C ++
Cosa troverai in questo corso base
- Introduzione al linguaggio
- Spiegazione dei concetti di teoria
- Spiegazione degli esercizi passo passo
- Materiale da poter scaricare
Allo stesso modo anche fscanf è molto simile a scanf, infatti la sintassi è la seguente:
int fscanf(FILE *fp, char *formato, [argomenti]...)
Anche in questo caso notiamo che la differenza con scanf è nel primo argomento che rappresenta il puntatore allo stream, mentre il significato degli altri argomenti rimane invariato.
Inoltre la funzione fscanf, a differenza di scanf, ritorna un valore intero, che rappresenta il numero di caratteri letti.
Anche con fscanf, in caso di insuccesso la funzione restituisce una costante intera EOF (end of file).
Esempio d’utilizzo della funzione fscanf
Realizziamo un programma che prende un file di testo esistente, quello che abbiamo creato nell’esercizio precedente e, dopo l’apertura, ne leggiamo il contenuto.
La funzione fscanf non considera gli spazi all’interno del secondo argomento, quindi potrei anche scrivere “%s%s%d, ovvero tutto attaccato, senza modificare il risultato. Per lo stesso ragionamento potrei lasciare anche tanti spazi tra gli specificatori di formato senza in questo caso variare l’output.
Quando legge il file la funzione fscanf percepisce gli argomenti dallo spazio che c’è tra di loro all’interno del file.
Ecco dunque un semplice esempio di utilizzo della funzione:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main() {
FILE *fp;
char cognome[20];
char nome[20];
int i, voto;
if((fp=fopen("alunni.txt", "rt"))==NULL) {
printf("Errore nell'apertura del file'");
exit(1);
}
for(i=0;i<N;i++) {
fscanf(fp,"%s %s %d\n", &cognome, &nome, &voto);
printf("cognome: %s, nome: %s, voto: %d\n", cognome, nome, voto);
}
fclose(fp);
return 0;
}
Questo è solo un semplice esempio d’uso della funzione fscanf, più avanti faremo tante altre esercitazioni.
Alcuni link utili
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna