Campos de especificação de formato: funções scanf
e wscanf
As informações presentes aqui se aplicam a toda a família de funções scanf
, incluindo as versões seguras. Elas descrevem os símbolos usados para informar as funções scanf
como analisar o fluxo de entrada, como o fluxo de entrada stdin
, e interpretá-lo como valores a serem inseridos em variáveis de programa.
O argumento format
é uma cadeia de caracteres que especifica a interpretação da entrada e pode conter um ou mais dos seguintes:
Caracteres de espaço em branco: em branco (
\t
) ou nova linha (\n
). Um caractere de espaço em branco faz com quescanf
leia, mas não armazene todos os caracteres de espaço em branco consecutivos na entrada, até o próximo caractere que não seja de espaço em branco. Um caractere de espaço em branco no formato corresponde a qualquer número (incluindo 0) e combinação de caracteres de espaço em branco na entrada.Caracteres que não são de espaço em branco, exceto pelo sinal de porcentagem (
%
). Um caractere que não é de espaço em branco faz com quescanf
leia, mas não armazene um caractere que não seja de espaço em branco correspondente. Se o próximo caractere no fluxo de entrada não for correspondente,scanf
será encerrado.Especificações de formato, introduzidas pelo sinal de porcentagem (
%
). Uma especificação de formato faz com quescanf
leia e converta caracteres na entrada em valores de um tipo especificado. O valor é atribuído a um argumento na lista de argumentos.Uma especificação de formato tem a seguinte forma:
%
[*
][width
][{h
ll
||L
l
|I64
|}]type
Aqui,
width
,h
,l
,ll
,I64
, eL
representam uma especificação descanf
largura etype
representam um caractere descanf
campo de tipo.
A cadeia de caracteres de argumento format
é lida da esquerda para a direita. Caracteres fora das especificações de formato devem corresponder à sequência de caracteres no fluxo de entrada. Os caracteres correspondentes no fluxo de entrada são verificados, mas não armazenados. Se um caractere no fluxo de entrada estiver em conflito com a especificação de formato, scanf
será encerrado e o caractere será deixado no fluxo de entrada como se não tivesse sido lido.
Quando a primeira especificação de formato é encontrada, o valor do primeiro campo de entrada é convertido de acordo com essa especificação. Esse valor é armazenado no local especificado pelo primeiro argumento sucessivo ao argumento format
. A segunda especificação de formato faz com que o segundo campo de entrada seja convertido e armazenado no próximo argumento e assim por diante, até o final da cadeia de caracteres de formato.
Um campo de entrada é definido como: todos os caracteres até o primeiro caractere de espaço em branco (espaço, tabulação ou nova linha), até o primeiro caractere que não possa ser convertido de acordo com a especificação de formato ou até que a largura do campo (se especificada) seja atingida. Se houver muitos argumentos para as especificações fornecidas, os argumentos extra serão avaliados, mas ignorados. Se não houver argumentos suficientes para a especificação de formato, os resultados serão imprevisíveis.
Cada campo da especificação de formato é um caractere único ou um número indicando uma opção de formato específico. O caractere type
, que aparece após o último campo de formato opcional, determina se o campo de entrada é interpretado como um caractere, uma cadeia de caracteres ou um número.
A especificação de formato mais simples contém apenas o sinal de porcentagem e um caractere type
(por exemplo, %s
). Se um sinal de porcentagem (%
) for seguido por um caractere sem nenhum significado, como um caractere de controle de formato, esse caractere e os caracteres seguintes (até o sinal de porcentagem seguinte) serão tratados como uma simples sequência de caracteres. Ou seja, eles são tratados como uma sequência de caracteres que precisam corresponder à entrada. Por exemplo, para especificar que um caractere de sinal de porcentagem deve ser inserido, use %%
.
Um asterisco (*
) após o sinal de porcentagem suprime a atribuição do próximo campo de entrada, o que é interpretado como um campo do tipo especificado. O campo é verificado, mas não é armazenado em um argumento.
As versões seguras (aquelas com o sufixo _s
) da família de funções scanf
exigem que cada parâmetro do tipo c
, C
, s
, S
ou [
seja seguido imediatamente de um parâmetro de tamanho do buffer. Para obter mais informações sobre as versões seguras da família de funções scanf
, confira scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
.
Confira também
scanf
Especificação de largura
scanf
Caracteres de campo de tipo
scanf
, _scanf_l
, wscanf
, _wscanf_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l