scanf, _scanf_l, wscanf, _wscanf_l
Dados formatados de leitura de fluxo de entrada padrão.Versões mais seguros desses função estão disponíveis; consulte 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]... );
Parâmetros
format
Cadeia de caracteres de formato do controle.argument
Argumentos opcionais.locale
A localidade a ser usada.
Valor de retorno
Retorna o número de campos com êxito convertidos e atribuído; o valor de retorno não inclui os campos que foram lidos mas não atribuído.Um valor de retorno de 0 indica que nenhuma propriedade esteve atribuído.
Se format é um ponteiro de NULL , o manipulador inválido do parâmetro é invocado, como descrito em Validação de parâmetro.Se a execução é permitida continuar, essas funções EOF de retorno e errno defina a EINVAL.
Para obter informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist, e _sys_nerr.
Comentários
A função de scanf ler dados de fluxo de entrada padrão stdin e grava os dados na localidade determinada por argument.Cada argument deve ser um ponteiro a uma variável de um tipo que corresponde a um especificador de tipo em format.Se copiar ocorre entre as cadeias de caracteres que sobrepostos, o comportamento é indefinido.
Observação de segurança |
---|
Ao ler uma cadeia de caracteres com scanf, sempre especificar uma largura para o formato de %s (por exemplo, "%32s" em vez de "%s"); caso contrário, a entrada incorretamente formatada pode facilmente causar um estouro de buffer.Como alternativa, considere usar scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets. |
wscanf é uma versão de largo- caractere de scanf; o argumento de format a wscanf é uma cadeia de caracteres de largo- caractere.wscanf e scanf se comportam de forma idêntica se o fluxo é aberta no modo ANSI.scanf não tem suporte para a entrada de um fluxo de UNICODE.
As versões dessas funções com o sufixo de _l são idênticas exceto que usam o parâmetro de localidade passado em vez de localidade atual da thread.
Mapeamentos da rotina de Genérico- texto
Rotina de TCHAR.H |
_UNICODE & _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Para obter mais informações, consulte Formatar campos de especificação — funções de scanf e funções de wscanf.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> ou <wchar.h> |
O console não é suportado em aplicativos de Windows Store .Identificadores padrões de fluxo associadas ao console, stdin, stdout, e stderr, devem ser redirecionada antes que as funções de tempo de execução das C pode usar em aplicativos de Windows Store .Para informações extras de compatibilidade Compatibilidade na introdução, consulte.
Exemplo
// 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);
}
Equivalência do .NET Framework
Consulte também métodos de Parse , como System::Double::Parse.
Consulte também
Referência
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l