scanf
, _scanf_l
, wscanf
_wscanf_l
Legge i dati formattati dal flusso di input standard. Sono disponibili versioni più sicure di queste funzioni; vedere scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
.
Nota
In Visual Studio 2015 Le printf
funzioni e scanf
la famiglia di funzioni sono state dichiarate come inline
e spostate nelle <stdio.h>
intestazioni e <conio.h>
. Se si esegue la migrazione di codice precedente, è possibile che venga visualizzato l'errore del linker LNK2019 in connessione a queste funzioni. Per altre informazioni, vedere Cronologia delle modifiche di Visual C++ 2003 - 2015.
Sintassi
int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
_locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
_locale_t locale [,
argument]...
);
Parametri
format
Stringa di formato controllo.
argument
Argomenti facoltativi.
locale
Impostazioni locali da usare.
Valore restituito
Restituisce il numero di campi convertiti e assegnati correttamente; Il valore restituito non include campi letti ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato.
Se format
è un NULL
puntatore, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EOF
e impostano errno
su EINVAL
.
Per informazioni su questi e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Osservazioni:
La funzione scanf
legge i dati dal flusso di input standard stdin
e scrive i dati nella posizione specificata da argument
. Ogni argument
deve essere un puntatore a una variabile di un tipo che corrisponde a un identificatore di tipo in format
. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
Importante
Durante la lettura di una stringa con scanf
, specificare sempre una larghezza per il formato %s
, ad esempio, %32s
anziché %s
. In caso contrario, l'input formattato in modo non appropriato può facilmente causare un sovraccarico del buffer. In alternativa, prendere in considerazione l'uso di scanf_s
, _scanf_s_l
wscanf_s
, _wscanf_s_l
o .fgets
wscanf
è una versione a caratteri wide di scanf
; l'argomento format
in wscanf
è una stringa di caratteri wide. wscanf
e scanf
si comportano in modo analogo, se il flusso viene aperto in modalità ANSI. scanf
non supporta attualmente l'input da un flusso UNICODE.
Le versioni di queste funzioni con il suffisso _l
sono identiche ad eccezione per il fatto che utilizzano il parametro delle impostazioni locali passato al posto di quelle del thread corrente.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Per altre informazioni, vedere Formattare i campi delle specifiche: scanf
e wscanf
le funzioni.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
scanf , _scanf_l |
<stdio.h> |
wscanf , _wscanf_l |
<stdio.h> oppure <wchar.h> |
La console non è supportata nelle app piattaforma UWP (Universal Windows Platform) (UWP). Gli handle di flusso standard associati alla console, stdin
, stdout
e stderr
devono essere reindirizzati prima che le funzioni di runtime C possano usarle nelle app UWP. Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_scanf.c
// compile with: /W3
// This program uses the scanf and wscanf functions
// to read formatted input.
#include <stdio.h>
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters
Vedi anche
Supporto matematico e a virgola mobile
I/O di flusso
impostazioni locali
fscanf
, _fscanf_l
, fwscanf
_fwscanf_l
printf
, _printf_l
, wprintf
_wprintf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
__swprintf_l
sscanf
, _sscanf_l
, swscanf
_swscanf_l