scanf, _scanf_l, wscanf, _wscanf_l
Lê dados formatados do fluxo de entrada padrão. Versões mais seguras dessas funções 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 controle de formato.argument
Argumentos opcionais.locale
A localidade a ser usada.
Valor de retorno
Retorna o número de campos que com êxito são convertidos e atribuídos; o valor de retorno não inclui os campos que foram lidos mas não atribuídos. Um valor de retorno 0 indica que nenhum campo foi atribuído.
Se format é um ponteiro NULL, o parâmetro de manipulador inválido é invocado, como descrito em Validação do parâmetro. Se a execução puder continuar, essas funções retornarão EOF e definirão errno para EINVAL.
Para obter informações sobre esses e outros códigos de erro, consulte _doserrno, errno, _sys_errlist, and _sys_nerr.
Comentários
A função de scanf ler dados do fluxo de entrada padrão stdin e grava os dados no local especificado por argument. Cada argument deve ser um ponteiro para uma variável de tipo que corresponde a um especificador do tipo em format. Se a cópia for feita entre cadeias de caracteres que se sobrepõem, o comportamento será indefinido.
Observação de segurança |
---|
Ao ler uma cadeia de caracteres com scanf, sempre especifique uma largura para o formato de %s (por exemplo, "%32s" em vez de "%s"); caso contrário, a entrada de forma incorreta formatado pode fazer facilmente uma excesso de buffer.Como alternativa, considere usar scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets. |
wscanf é uma versão de caractere longo de scanf; o argumento format para wscanf é uma cadeia de caractere longo. wscanf e scanf se comportarão de forma idêntica se o fluxo for aberto no modo de ANSI. scanf não oferece suporte a entrada de um fluxo de UNICODE.
As versões dessas funções com o sufixo _l são idênticas, exceto que usam o parâmetro de localidade passado em vez da localidade de thread atual.
Mapeamentos da rotina de texto genérico
Rotina TCHAR.H |
_UNICODE & _MBCS não definido |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Para obter mais informações, consulte Formatar campos da 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 tem suporte em aplicativos do Windows Store. Os manipuladores de fluxo padrão associados ao console — stdin, stdout e stderr — devem ser redirecionados antes que as funções de tempo de execução do C possam utilizá-los em aplicativos do Windows Store. Para informações adicionais de compatibilidade, consulte Compatibilidade.
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