scanf, _scanf_l, wscanf, _wscanf_l
Ler dados do fluxo de entrada padrão em formato.Versões mais seguras desses função estão disponível; 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
Seqüência de caracteres de controle de formato.argument
Argumentos opcionais.locale
A localidade para usar.
Valor de retorno
Retorna o número de campos convertido com êxito e atribuídos; o valor retornado não inclui campos que foram lidos, mas não atribuídos.Um valor retornado 0 indica que nenhum campo foi atribuído.
If format é um NULL ponteiro, o manipulador de parâmetro inválido é invocado, sistema autônomo descrito em Validação de parâmetro. Se a execução for permitida para continuar, essas funções retornam EOF e conjunto errno para EINVAL.
Para obter informações sobre estes e outros códigos de erro, consulte _doserrno, errno, _sys_errlist e _sys_nerr.
Comentários
The scanffunção lê os dados do fluxo de entrada padrão stdine grava os dados no local fornecido pelo argument. Cada argument deve ser um ponteiro para uma variável de tipo que corresponde a um especificador de tipo em format. Se copiar ocorre entre cadeias de caracteres que se sobrepõem, o comportamento é indefinido.
Observação de segurança: |
---|
Ao ler uma seqüência de caracteres com scanf, sempre especificar uma largura para o %s Formatar (por exemplo, "%32s" em vez de "%s"); caso contrário, a entrada formatada incorretamente pode com com facilidade causar uma saturação de buffer. Como alternativa, considere o uso de scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ou fgets. |
wscanf é uma versão de caractere largo da scanf; o format argumento para wscanf é uma seqüência de caracteres largos. wscanf e scanf tenham comportamento idêntico se o fluxo é aberto no modo ANSI. scanf atualmente não oferece suporte a entrada de um fluxo UNICODE.
As versões dessas funções com o _l sufixo são idênticas exceto que usarem o parâmetro de localidade passado em vez da localidade do thread corrente.
Mapeamentos de rotina de texto genérica
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 Os campos de especificação de formato — scanf funções e wscanf funções.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> ou <wchar.h> |
Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.
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
Equivalente do NET Framework
Consulte também Parse métodos, sistema autônomo sistema::Double::Parse.
Consulte também
Referência
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l