vscanf
, vwscanf
Lê dados formatados do fluxo de entrada padrão. Versões mais seguras dessas funções estão disponíveis; confira vscanf_s
, vwscanf_s
.
Sintaxe
int vscanf(
const char *format,
va_list arglist
);
int vwscanf(
const wchar_t *format,
va_list arglist
);
Parâmetros
format
Cadeia de caracteres de controle de formato.
arglist
Lista de argumentos variáveis.
Valor retornado
Retorna o número de campos que são 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 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 vscanf
lê dados do fluxo de entrada padrão stdin
e grava os dados nos locais que são fornecidos pela lista de argumentos arglist
. Cada argumento na lista 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
Quando você usa vscanf
para ler uma cadeia de caracteres, sempre especifique uma largura para o formato %s (por exemplo, "%32s" em vez de "%s"); caso contrário, a entrada formatada incorretamente pode causar uma saturação de buffer. Como alternativa, você pode usar vscanf_s
, vwscanf_s
ou fgets
.
A função vwscanf
é uma versão de caractere largo da função vscanf
; o argumento format
para vwscanf
é uma cadeia de caracteres larga. vwscanf
e vscanf
terão comportamento idêntico se o fluxo for aberto no modo ANSI. vscanf
não dá suporte à entrada de um fluxo UNICODE.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H | _UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_vtscanf |
vscanf |
vscanf |
vwscanf |
Para obter mais informações, consulte Campos de especificação de formato: scanf
e wscanf
funções.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
vscanf |
<stdio.h> |
vwscanf |
<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_vscanf.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.
#include <stdio.h>
#include <stdarg.h>
int call_vscanf(char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vscanf(format, arglist);
va_end(arglist);
return result;
}
int call_vwscanf(wchar_t *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vwscanf(format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = call_vscanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws );
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 = call_vwscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws );
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 charactersThe 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
vscanf_s
, vwscanf_s