Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Lê dados formatados do fluxo de entrada padrão. Versões mais seguras dessas funções estão disponíveis; confira scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
Observação
No Visual Studio 2015, a família de funções printf e scanf foram declarados como inline e movidos para os cabeçalhos <stdio.h> e <conio.h>. Se você estiver migrando código mais antigo, poderá ver o Erro do Vinculador LNK2019 em conexão com essas funções. Para saber mais, confira o histórico de alterações do Visual C++ 2003 – 2015.
Sintaxe
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 retornado
Retorna o número de campos convertidos e atribuídos com sucesso; O valor retornado não inclui campos que foram lidos, mas não atribuídos. Um valor retornado igual a 0 indica que nenhum campo foi atribuído.
Se format for um NULL ponteiro, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de 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, confira errno, _doserrno, _sys_errlist e _sys_nerr.
Comentários
A função scanf lê dados do fluxo de entrada padrão stdin e grava os dados no local fornecido por argument. Cada argument deve ser um ponteiro para uma variável de um tipo que corresponde a um especificador de tipo em format. Se ocorrer cópia entre cadeias de caracteres que se sobrepõem, o comportamento será indefinido.
Importante
Ao ler uma cadeia de caracteres com scanf, especifique sempre uma largura para o formato %s (por exemplo, %32s em vez de %s); caso contrário, entrada formatada de modo inadequado poderá facilmente causar um estouro de buffer. Como alternativa, considere usar scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets.
A função wscanf é uma versão de caractere largo da função scanf; o argumento format para wscanf é uma cadeia de caracteres larga. wscanf e scanf terão comportamento idêntico se o fluxo for aberto no modo ANSI. Atualmente, scanf não dá suporte à entrada de um fluxo UNICODE.
As versões dessas funções com o sufixo _l são idênticas, com a exceção de usarem o parâmetro de localidade passado, em vez da localidade do thread atual.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _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 Campos de especificação de formato: scanf e wscanf funções.
Requisitos
| Rotina | Cabeçalho necessário |
|---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> ou <wchar.h> |
Não há suporte para o console em aplicativos UWP (Plataforma Universal do Windows). Os identificadores de fluxo padrão associados ao console, stdin, stdout e stderr, devem ser redirecionados antes que as funções em tempo de execução C possam usá-los em aplicativos UWP. Para obter informações sobre 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);
}
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
Confira também
Suporte matemático e de ponto flutuante
E/S de fluxo
Localidade
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