scanf, _scanf_l, wscanf, _wscanf_l
Legge i dati formattatati dal flusso di input standard. Sono disponibili versioni più sicure di questa funzione; vedere scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
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 controllo del formato.argument
Argomenti facoltativi.locale
Impostazioni locali da utilizzare.
Valore restituito
Restituisce il numero di campi che vengono convertiti correttamente e assegnati; nel valore restituito non sono inclusi i campi che sono stati letti, ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato.
Se format è un NULL puntatore null, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EOF e impostano errno su EINVAL.
Per ulteriori informazioni su questi, e altri, codici di errore vedere _doserrno, errno, _sys_errlist, and _sys_nerr .
Note
La funzione scanf legge i dati dal flusso di input standard stdin e scrive i dati nella locazione che è data da argument. Ogni argument deve essere un puntatore alla variabile di un tipo che corrisponde ad un tipo specificato in format. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
Nota sulla sicurezza |
---|
Quando si legge una stringa con scanf specificare sempre una larghezza per il formato %s (ad esempio, "%32s" anziché "%s"); in caso contrario, un input inappropriato può facilmente causare un sovraccarico del buffer.In alternativa, considerare l'utilizzo di scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l o fgets. |
wscanf è una versione a caratteri estesi di scanf; l'argomento format in wscanf è una stringa di caratteri estesi. wscanf e scanf si comportano in modo identico se il flusso viene aperto in modalità ANSI. scanf attualmente non supporta l'input da un flusso di 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 in ingresso invece di utilizzare quelle del thread corrente.
Mapping di routine su testo generico
Routine TCHAR.H |
_UNICODE & e _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Per ulteriori informazioni, vedere Specifiche formato dei campi - funzioni scanf e funzioni wscanf.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> o <wchar.h> |
La console non è supportata nelle applicazioni Windows Store. Gli handle del flusso standard associati alla console,stdin, stdout e stderr, devono essere reindirizzati prima di poter utilizzare le funzioni di runtime del linguaggio C nelle applicazioni Windows Store. Per ulteriori informazioni sulla compatibilità, vedere 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);
}
Equivalente .NET Framework
Vedere anche i metodi Parse, come System::Double::Parse.
Vedere anche
Riferimenti
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l