Consente di scrivere testo formattato su un file di testo aperto in modalità di
scrittura o aggiornamento. È una generalizzazione della funzione printf
Valore di Ritorno: In caso di successo, la funzione restituisce il numero di
caratteri scritti nello stream; altrimenti, restituisce EOF (una costante simbolica,
solitamente -1, definita in stdio.h).
3) Scrittura di un singolo carattere (fputc):
- Funzione: int fputc (int c, FILE * fp);.
Consente di scrivere il carattere c su un file di testo aperto in modalità di
scrittura o aggiornamento. La funzione converte c in un unsigned char e usa
solo il byte di ordine più basso.
Valore di Ritorno: In caso di successo, restituisce il carattere scritto; altrimenti,
restituisce EOF.
4) Scrittura di una stringa (fputs):
- Funzione: int fputs (char * s, FILE * fp);.
Consente di scrivere una riga (stringa di caratteri) su un file di testo aperto in
modalità di scrittura o aggiornamento. La stringa s deve essere terminata con il
carattere di fine stringa \0.
Valore di Ritorno: In caso di successo, restituisce un intero non negativo;
altrimenti, restituisce EOF.
Lettura da File
1) Lettura di blocchi di byte (fread):
- Funzione: n = fread(buf, dimensione, elementi, fp);.
buf: È il vettore dove devono essere trasferite le informazioni lette dal file.
dimensione: Rappresenta la dimensione in byte di un elemento del vettore.
elementi: Indica il numero di elementi del vettore da leggere.
fp: Punta al file da leggere.
- Valore di Ritorno: Il valore di ritorno di fread indica il numero di elementi letti dal
file. Tale numero può non coincidere con il numero di elementi richiesti se il file
è vuoto o contiene un numero di elementi inferiore a quello di buf. Se il valore di
ritorno è negativo, significa che c'è stato un errore (es. il file non è stato
aperto). Quando tutto il contenuto del file è stato letto, la funzione fread ritorna
il valore 0.
- Accesso Sequenziale: Le operazioni di lettura accedono al file in maniera
sequenziale e mantengono traccia del punto in cui si è arrivati nella lettura. A
ogni chiamata a fread, il puntatore si sposta in avanti di un numero di byte pari
a quelli che sono stati letti. Per file grandi, fread deve essere ripetuta più di una
volta, leggendo a ogni chiamata soltanto una limitata porzione del file.
2) Lettura formattata per file di testo (fscanf):
- Funzione: int fscanf (FILE * fp, char * stringa_di_controllo,…..);.
Consente di leggere testo in modo formattato da un file di testo aperto in
modalità di lettura o aggiornamento. È una generalizzazione di scanf.
- Valore di Ritorno: In caso di successo, restituisce il numero di caratteri letti dal
file; altrimenti, restituisce EOF.
3) Lettura di un singolo carattere (fgetc):
- Funzione: int fgetc (FILE * fp);.
Consente di leggere il carattere correntemente puntato dall'indicatore di
posizione da uno stream di testo aperto in modalità di lettura o aggiornamento.
Valore di Ritorno: In caso di successo (se non si è raggiunto il marcatore end-of-
file), la funzione restituisce il carattere letto; altrimenti, restituisce EOF.
4) Lettura di una stringa (fgets):
- Funzione: char * fgets (char * s, int n, FILE * fp);.
Consente di leggere dalla posizione corrente di un file di testo (aperto in
modalità di lettura o aggiornamento) una stringa di al più n-1 caratteri e
memorizzarla nell’array s insieme al carattere \0 di terminazione stringa. Il
numero effettivo di caratteri letti può essere inferiore a n-1 se il k-esimo
carattere è un newline, che viene incluso nella stringa.
Valore di Ritorno: In caso di successo, la funzione restituisce s; in caso di
insuccesso (errore o raggiungimento dell'end-of-file), restituisce NULL.
5) Lettura e scrittura random nel file (fseek e fteel)
Nel C, è possibile operare sui file di byte anche con modalità random.
- fseek: Consente di muovere il puntatore di lettura e/o scrittura in una qualunque
posizione del file.
Funzione: err = fseek(fp, n, mode);.
fp: Il file pointer.
n: Indica di quanti byte il file pointer deve essere spostato. Se n è negativo,
significa che il file pointer deve essere spostato indietro.
mode: Indica a partire da quale posizione muovere il file pointer:
0 (o SEEK_SET): Spostamento a partire dall'inizio del file.
1 (o SEEK_CUR): Spostamento a partire dalla posizione corrente.
2 (o SEEK_END): Spostamento a partire dalla fine del file.
Valore di Ritorno: Negativo se si è verificato un errore, maggiore o uguale a 0 in
caso contrario.
- ftell:
Il C mette a disposizione questa funzione per conoscere la posizione corrente
del file pointer.
Funzione: n = ftell(fp);.
Valore di Ritorno: Ritorna la posizione corrente del file pointer. Se si verifica un
errore (per esempio se il file non è stato aperto), ftell ritorna un valore negativo.
Questa funzione può essere usata, ad esempio, per determinare la dimensione
di un file posizionando il puntatore alla fine e poi chiamando ftell.
6) Controllo Fine File (feof)
- Funzione: int feof (FILE * fp);.
Scopo: Consente di controllare se il file pointer è posizionato a fine file (end-of-
file).
Valore di Ritorno: Restituisce 1 se il file pointer è posizionato a fine file e il
numero 0 in caso contrario.
7. Stream di Default
Quando un programma C va in esecuzione, il sistema apre automaticamente tre file
pointer, chiamati stream di default o flussi standard:
•stdin: Lo standard input, che riceve input dalla tastiera ed è aperto in sola lettura.
•stdout: Lo standard output, che stampa l'output sullo schermo ed è aperto in sola
scrittura.
•stderr: Lo standard error, che stampa messaggi di errore sullo schermo ed è aperto in
sola scrittura. Questi stream sono manipolati usando le variabili globali puntatore di
tipo FILE * stdin, stdout, e stderr definite in stdio.h.
Esistono equivalenze tra alcune funzioni di I/O standard e le loro controparti per file:
•printf(...) è equivalente a fprintf(stdout,...).
•scanf(...) è equivalente a fscanf(stdin,...).
•getchar() è equivalente a fgetc(stdin).
•putchar(c) è equivalente a fputc(c, stdout).
•feof() è equivalente a feof(stdin).
È importante notare che gets(buf) non è equivalente a fgets(buf, n, stdin) perché gets
legge una riga da tastiera ma elimina il carattere di newline. Allo stesso modo,
puts(buf) non è equivalente a fputs(buf, stdout) perché puts scrive una riga a video
aggiungendo automaticamente un carattere di newline. Inoltre, gets non offre
controllo sulla dimensione del buffer, il che la rende una funzione insicura.
8. Specificatori di Formato per printf/fprintf
Le funzioni printf e fprintf utilizzano specificatori di formato per controllare la stampa
dell'output. La sintassi generale è %[flags][width][.precision][length]specifier. Alcuni
specificatori comuni (specifier) includono:
•%d o %i: intero decimale con segno.
•%u: intero decimale senza segno.
•%o: intero ottale senza segno.
•%x o %X: intero esadecimale senza segno (maiuscolo per %X).
•%f o %F: numero in virgola mobile decimale.
•%e o %E: notazione scientifica (mantissa/esponente).
•%g o %G: usa la rappresentazione più breve tra %e e %f (o %E e %F).
•%c: carattere singolo.
-
Appunti matematica con elementi di statistica, file 2
-
Appunti Matematica con elementi di statistica, file 3
-
Appunti matematica con elementi di statistica, file 1
-
Esercitazione sui file di testo - Con soluzione