Compartilhar via


scanf especificação de largura

Esta informação se aplica a interpretação de seqüências de caracteres de formato na scanf da família de funções, incluindo as versões seguras, como scanf_s.Essas funções normalmente assumem que o fluxo de entrada é dividido em uma seqüência de tokens.Tokens são separadas por espaço em branco (espaço, tabulação ou nova linha) ou no caso de tipos numéricos, até o final natural de um tipo de dados numéricos, conforme indicado pelo primeiro caractere que não pode ser convertido em texto numérico.No entanto, a especificação de largura pode ser usada para fazer com que a análise da entrada parar antes do fim natural de um token.

O largura especificação consiste em caracteres entre a % e o especificador de campo de tipo, que pode incluir um inteiro positivo chamado a largura de campo e um ou mais caracteres que indica o tamanho do campo, que também pode ser considerado como modificadores do tipo do campo, como, por exemplo, uma indicação que informa se o tipo de inteiro é curto ou longo.Esses caracteres são chamados como o prefixo de tamanho.

O campo de largura

A largura da campo é um positivo inteiro decimal controlando o número máximo de caracteres a serem lidos para aquele campo.Não mais do que largura caracteres são convertidas e armazenadas em correspondente argument.Menos de largura os caracteres podem ser lidos se um caractere de espaço em branco (espaço, tabulação ou nova linha) ou um caractere que não pode ser convertido de acordo com o formato de determinado ocorrerá antes largura for atingido.

A especificação de largura é separado e distinto do que o argumento de tamanho do buffer necessário para as versões seguras dessas funções (ou seja, scanf_s, wscanf_s, etc.).No exemplo a seguir, a especificação de largura é 20, indicando que até 20 caracteres devem ser lidos do fluxo de entrada.O comprimento do buffer é 21, que inclui o espaço para os possíveis 20 caracteres, mais o terminador nulo:

char str[21];
scanf_s("%20s", str, 21);

Se o largura campo não for usado, scanf_s tentará ler o token de inteiro na seqüência.Se o tamanho especificado não é grande o suficiente para conter o símbolo de inteiro, nada será gravado para a seqüência de caracteres de destino.Se o largura campo for especificado, em seguida, o primeiro largura caracteres no token serão gravados para a seqüência de destino, juntamente com o terminador nulo.

O prefixo de tamanho

Os prefixos opcionais h, l, ll, I64, e l indicam o tamanho da argument (longa ou curta, caracteres de byte único ou de caractere largo, dependendo do caractere de tipo que eles modificar).Esses caracteres de especificação de formato são usados com caracteres de tipo no scanf ou wscanf funções para especificar a interpretação dos argumentos, como mostrado na tabela a seguir.O prefixo do tipo I64 é uma extensão da Microsoft e não é ANSI compatível.Os caracteres de tipo e seus significados são descritos na tabela "Digitar caracteres para funções de scanf" em scanf caracteres de campo de tipo.

ObservaçãoObservação

O h, l, e l os prefixos são extensões do Microsoft quando usado com o tipo de dados char.

Prefixos de tamanho para scanf e especificadores de tipo de formato de wscanf

Para especificar

Use o prefixo

Especificador de tipo

double

l

e, E, f, g, or G

long double (igual à dupla)

L

e, E, f, g, or G

Long int

l

d, i, o, x, or X

int longo não assinado

l

u

long long

ll

d, i, o, x, or X

short int

h

d, i, o, x, or X

Short int não assinado

h

u

__int64

I64

d, i, o, u, x, or X

Caractere de byte único comscanf

h

c or C

Caractere de byte único comwscanf

h

c or C

Caractere largo comscanf

l

c or C

Caractere largo comwscanf

l

c, or C

Byte único – a seqüência de caracteres comscanf

h

s or S

Byte único – a seqüência de caracteres comwscanf

h

s or S

Cadeia de caracteres largos comscanf

l

s or S

Cadeia de caracteres largos comwscanf

l

s or S

Os exemplos seguintes usam h e l com scanf_s funções e wscanf_s funções:

scanf_s( "%ls", &x, 2 );     // Read a wide-character string
wscanf_s( "%hC",&x, 2 );    // Read a single-byte character

Se usando uma função não segura na scanf família, omita o parâmetro size indicando o comprimento do buffer do argumento anterior.

Seqüências de caracteres de leitura Undelimited

A leitura de seqüências de caracteres que não são delimitadas por espaço em branco caracteres, um conjunto de caracteres entre colchetes ([]) podem ser substituídos pela s o caractere de tipo (string).O conjunto de caracteres entre colchetes é chamado como uma seqüência de caracteres de controle.O campo de entrada correspondente é ler até o primeiro caractere que não aparece na seqüência de caracteres de controle.Se o primeiro caractere no conjunto é um acento circunflexo (^), o efeito é invertido: O campo de entrada é lida o primeiro caractere que aparecem no restante do conjunto de caracteres.

Observe que % [a-z e % [z-a são interpretados como equivalente a %[abcde...z.Este é um comum scanf a extensão de função, mas lembre-se que o padrão ANSI não exige que ele.

Seqüências de caracteres não finalizada leitura

Para armazenar uma seqüência de caracteres sem armazenar um caractere nulo de terminação ('\0'), use a especificação %nc onde n é um inteiro decimal.Nesse caso, o c o caractere de tipo indica que o argumento é um ponteiro para uma matriz de caracteres.O próximo n caracteres são lidos do fluxo de entrada para o local especificado, e nenhum caractere nulo ('\0') é acrescentado.Se n não for especificado, o valor padrão é 1.

Quando o scanf interrompe a leitura de um campo

O scanf função examina cada campo de entrada, o caractere por caractere.Ele pode parar de ler um determinado campo de entrada antes que ele atinja um caractere de espaço para uma variedade de motivos:

  • A largura especificada foi atingida.

  • O próximo caractere não pode ser convertido conforme especificado.

  • Os conflitos do próximo caractere com um caractere na seqüência de controle que ele deve para corresponder.

  • O próximo caractere não aparecer em um determinado conjunto de caracteres.

Por qualquer motivo, quando o scanf função interrompe a leitura de um campo de entrada, o próximo campo de entrada é considerado para começar no primeiro caractere não lido.O caractere em conflito, se houver algum, é considerado não lidas e é o primeiro caractere do que o próximo campo de entrada ou o primeiro caractere em operações subseqüentes de leitura no fluxo de entrada.

Consulte também

Referência

scanf, _scanf_l, wscanf, _wscanf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Campos de especificação de formato: scanf e wscanf funções

scanf caracteres de campo de tipo