La funzione fgets in C serve a leggere le stringhe in un file, precedentemente aperto con la funzione fopen.
La sintassi della funzione fgets è la seguente:
char *fgets(char *stringa, int lun, FILE *fp)
Quindi la funzione legge una stringa e la memorizza nella locazione di memoria puntata da stringa. Con lun intendiamo il numero massimo di caratteri della stringa che può essere letto. Vengono letti lun-1 caratteri perché ricordiamo che la stringa termina con il carattere terminatore (\0). Come abbiamo già spiegato per le altre funzioni, FILE *fp è il puntatore al file restituito dalla funzione fopen.
Corsi registrati su
C, C++, Python, JavaScript
Corsi in diretta per la formazione di Front End Developer e Back End Developer
La funzione ritorna un puntatore alla stringa e nel caso in cui si ha un errore restituisce NULL.
Esempio di utilizzo di fgets in C
Proponiamo dunque un semplice esempio che permette di aprire un file in lettura e contare quante righe e caratteri ci sono.
Inizializziamo a zero i contatori della riga e dei caratteri, nr ed nc.
Chiediamo in input il nome del file di cui vogliamo conoscere il numero di righe e di caratteri e apriamo il file con la funzione fopen. Visualizziamo un messaggio di errore se ci sono problemi nell’apertura del file.
Dopo utilizziamo un ciclo while con la funzione fgets, che come abbiamo detto prende tre parametri: la stringa, il numero di caratteri e il puntatore al file. Finché non arriviamo a leggere tutte le stringhe presenti nel file, incrementiamo semplicemente i due contatori.
Corsi registrati su
C, C++, Python, JavaScript
Corsi in diretta per la formazione di Front End Developer e Back End Developer
Infine chiudiamo il file usando la funzione fclose e stampiamo il risultato ottenuto.
Ecco dunque il listato completo dell’algoritmo con l’utilizzo di fgets:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 60
int main()
{
FILE *fp;
char nome[FILENAME_MAX],r[N];
int nr=0, nc=0;
printf("Nome del file:");
gets(nome);
if ((fp=fopen(nome,"rt"))==NULL) {
printf("Errore nell'apertura del file");
exit(1);
}
while(fgets(r,N,fp)!=NULL) {
nr++;
nc+= strlen(r)-1;
}
fclose(fp);
printf("Totale righe: %d\nTotale caratteri: %d\n", nr, nc);
return 0;
}
Chiaramente questo era solo un semplice esempio d’uso della funzione fgets in C, approfondiremo più avanti con altri esempi.
Corsi registrati su
C, C++, Python, JavaScript
Corsi in diretta per la formazione di Front End Developer e Back End Developer
Alcuni link utili
Allocazione dinamica della memoria con malloc
Esercitazione sulle struct in C