Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Campos de especificação de formato: funções
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 (
); tabulação (\t) ou nova linha (\n). Um caractere de espaço em branco faz com quescanfleia, 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 quescanfleia, 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,scanfserá encerrado.Especificações de formato, introduzidas pelo sinal de porcentagem (
%). Uma especificação de formato faz com quescanfleia 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][{hll||Ll|I64|}]typeAqui,
width,h,l,ll,I64, eLrepresentam uma especificação descanflargura etyperepresentam um caractere descanfcampo 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