Linguaggio C - scanf(), fscanf(), sscanf(), vscanf(), vfscanf(), vsscanf()

NOME

scanf(), fscanf(), sscanf(), vscanf(), vfscanf(), vsscanf() - input formattato

SINOPSI

#include <stdio.h> int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); int sscanf(const char *str, const char *format, ...); #include <stdarg.h> int vscanf(const char *format, va_list ap); int vfscanf(FILE *stream, const char *format, va_list ap); int vsscanf(const char *str, const char *format, va_list ap);

DESCRIZIONE

La funzione scanf() legge l'input da stdin ed esegue le conversioni in base alla stringa di formattazione format assegnando i valori convertiti alle variabili, i cui puntatori sono passati come argomenti della funzione.

La stringa di formattazione puo' contenere sia caratteri ordinari che direttive di conversione.
Caratteri a spazio (spazi, tab o new line) contenuti in format attendono dall'input un numero qualsiasi, compreso nessuno, di caratteri a spazio (spazi, tab o new line).
La maggior parte delle conversioni, saltano gli spazi bianchi iniziali.
In caso che format contenga dei caratteri ordinari, questi devono corrispondere ai caratteri letti in input.
La scansione si arresta quando un carattere in input non trova piu' corrispondenza con la stringa di formattazione, oppure quando una conversione non puo' essere eseguita.
La direttiva di conversione e' formata da:
% Obbligatorio Indica l'inizio di una direttiva di conversione.
* Flag opzionale Soppressione dell'assegnamento. La conversione avviene normalmente scaricando il risultato prodotto.
Ampiezza max. Numero opzionale Indica il numero massimo di caratteri da convertire per la direttiva corrente. Eccetto il caso del carattere di conversione c, il default e' infinito.
Modificatore Lettera opzionale Puo' essere h, l (elle) o L.
Il modificatore h viene utilizzato in presenza dei caratteri di conversione d, i, o, u, x o n, modificando il tipo dell'argomento a short int * mentre il modificatore l (elle) con gli stessi caratteri di conversione implica che l'argomento sia di tipo long int *
Sempre il modificatore l (elle), ma con i caratteri di conversione e, f o g, implica che l'argomento sia double *
Il modificatore L con i caratteri di conversioni e, f o g, indica che l'argomento e' del tipo long double *
Carattere
di
conversione
Lettera obbligatoria Termina la specifica di conversione relativa ad un argomento della lista variabile.
Nella tabella seguente e' indicato il carattere di conversione, il tipo (in mancanza di modificatori) del parametro e una breve descrizione della conversione effettuata.
Carattere Tipo arg. Specifica di conversione
d int * L'input e' convertito in decimale intero con segno opzionale.
u int * L'input e' convertito in decimale intero non segnato.
i int * L'input e' convertito in un intero con segno opzionale.
L'intero e' convertito dalla base 16 (numero esadecimale) se l'input inizia con 0x o 0X, dalla base 8 (numero ottale) se l'input inizia con 0, dalla base 10 (numero decimale) altrimenti.
o unsigned int * La conversione avviene leggendo l'input come intero in base 8 (numero ottale) privo di segno.
x, X unsigned int * La conversione avviene leggendo l'input come intero in base 16 (numero esadecimale) privo di segno.
c char * I prossimi caratteri (1 per default, o specificati dall'ampiezza) sono memorizzati nell'area indirizzata dal puntatore passato come argomento. Gli spazi iniziali non vengono scartati. Il terminatore '\0' non viene memorizzato. L'area puntata deve essere sufficientemente ampia per contenere i caratteri in input.
s char * Accetta una stringa di caratteri non comprendente gli spazi. Alla fine e' aggiunto il terminatore '\0'. L'area di memoria puntata dal puntatore passato in argomento deve essere sufficientemente ampia da contenere i caratteri letti in input ed in piu' il terminatore. L'input del campo si arresta quando viene incontrato uno spazio, oppure quando e' stata raggiunta la lunghezza della stringa definita dall'ampiezza massima.
e, f, g float * Accetta un numero decimale con segno, parte frazionaria ed esponente opzionali.
p void * Accetta un puntatore nello stesso formato da come viene stampato nella printf() con la direttiva di conversione "%p".
n int * L'input non viene letto e non viene effettuata nessuna conversione.
Il numero di caratteri letto fino ad ora viene memorizzato nell'area di memoria puntata dal puntatore.
Lo standard C stabilisce che il valore di ritorno non viene incrementato dalla presenza di %n, ma successive rettifiche sembrano contraddire cio', pertanto e' meglio non considerare il valore ritornato in presenza di questa direttiva.
[ char * Accetta dall'input una stringa formata esclusivamente dai caratteri compresi fra [ e ] della direttiva, oppure non compresi se il primo carattere fra le parentesi quadre [] e' '^'.
L'area di memoria indirizzata dal puntatore, deve essere sufficientemente grande per accogliere tutti i caratteri selezionati (o al massimo il numero definito dall'ampiezza) piu' il terminatore '\0'.
L'input termina quando viene rilevato un carattere che non appartiene (o appartiene, in caso di esclusione) al set richiesto, o al raggiungimento della dimensione massima (ampiezza).
Per indicare che la parentesi quadra chiusa ] fa parte (o non fa parte) dei caratteri di selezione, questa deve essere il primo carattere della serie, dopo la parentesi quadra di apertura o dopo dell'accento circonflesso.
Il carattere '-' indica un intervallo di caratteri, cosi' ad esempio "0-9" indica la selezione (o la esclusione, se il primo carattere e' '^') di tutte le cifre. Per includere anche il carattere '-' nella selezione, questo deve essere l'ultimo carattere della serie.
%   Corrisponde alla costante '%' e tale carattere e' atteso dall'input.
Non avviene nessuna conversione.
Il valore ritornato non e' incrementato dalla presenza della direttiva "%%".

La funzione fscanf() ha lo stesso comportamento della funzione scanf(), ma l'input avviene da stream.

La funzione sscanf() ha lo stesso comportamento della funzione scanf(), ma l'input avviene da str.

Le funzioni vscanf(), vfscanf() e vsscanf() hanno lo stesso comportamento delle funzioni scanf(), fscanf() e sscanf() (e quindi l'input viene gestito rispettivamente da stdin, da stream e da stringa) con la differenza che gli argomenti successivi a format vengono referenziati tramite la variable argument list ap. Per maggiori informazioni sulla variable argument list, consultare le man pages di stdarg.h

VALORE DI RITORNO

Le funzioni scanf(), fscanf(), sscanf(), vscanf(), vfscanf() e vsscanf() ritornano il numero delle variabili a cui sono stati assegnati i valori convertiti oppure EOF se e' stato riscontrato un errore di lettura dell'input od e' stata incontrata la fine del file prima che sia stata effettuata almeno una conversione.
Un ritorno del valore zero, indica che c'e' l'input disponibile, ma non e' avvenuto il match nella specifica di conversione definita da format

CONFORME A

Funzioni fscanf(), scanf e sscanf: ANSI C3.159-1989 (`ANSI C').

VEDI ANCHE

fopen() fdopen() freopen() tmpfile() fclose() setbuf() setbuffer() setlinebuf() setvbuf() clearerr() feof() ferror() fileno() fseek() rewind() ftell() fgetpos() fsetpos() fflush() fgetc() getc() getchar() ungetc() fputc() putc() putchar() fgets() gets() fputs() puts() printf() fprintf() sprintf() snprintf() vprintf() vfprintf() vsprintf() vsnprintf() fread() fwrite()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page
Indice funzioni Indice funzioni C