libri-javascript-python

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.

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

Indice argomenti linguaggio 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

Matrice trasposta

Array con numeri random

Quick sort in C

Insertion Sort in C