scanf, _scanf_l, wscanf, _wscanf_l

Lê dados formatados do fluxo de entrada padrão. As versões mais seguras dessas funções estão disponíveis; consulte scanf_s , _scanf_s_lwscanf_s ,, _wscanf_s_l.

Observação

no Visual Studio 2015, a família e as printf funções foram declaradas como inline e movidas para os <stdio.h> cabeçalhos e <conio.h> . scanf Se você estiver migrando um código mais antigo, poderá ver LNK2019 em conexão com essas funções. Para obter mais informações, consulte Visual C++ histórico de alterações 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 êxito; 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 ponteiro NULL, 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, consulte _doserrno , errno_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 , sempre especifique uma largura para o %s formato (por exemplo, " %32s " em vez de " %s "); caso contrário, a entrada formatada incorretamente poderá causar facilmente uma saturação do buffer. Como alternativa, considere usar scanf_s , _scanf_s_lwscanf_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 da rotina de texto genérico

TCHAR.H rotina _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 Campos de especificação de formato – funções scanf e wscanf.

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 Plataforma Universal do Windows (UWP). Os identificadores de fluxo padrão associados ao console stdinstdout do,, e stderr , devem ser redirecionados antes que as funções de tempo de execução do C possam usá-los em aplicativos UWP. Para obter mais 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 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