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_errliste _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_lwscanf_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, stdoute stderrdevono 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