Share via


scanf especificação de largura

Essas informações se aplicam à interpretação de seqüências de caracteres de formato no scanf família de funções, incluindo versões seguras, sistema autônomo scanf_s. Essas funções normalmente assumem que o fluxo de entrada é dividido em uma sequência de tokens.Tokens são separados por espaços em branco (espaço, guia, ou nova linha), ou no caso de tipos numéricos, no participante natural de um tipo de dados numéricos sistema autônomo 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 término natural de um token.

The largura especificação consiste em caracteres entre o % o especificador de campo tipo, que pode incluir um número inteiro positivo chamado e o largura campo e uma ou mais caracteres que indica o dimensionar do campo, também pode ser considerado sistema autônomo modificadores do tipo do campo, sistema autônomo uma indicação se o tipo de inteiro é curto or longo.Tais caracteres são chamados de prefixo dimensionar.

A largura de campo

A largura campo é um número decimal inteiro positivo controlar o número máximo de caracteres para ser lido para esse campo.Não mais de largura convertidos e armazenados na correspondente caracteresargument. Menos de largura 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 determinado formato ocorre antes de largura for atingido.

A especificação de largura é separados e distintos do argumento dimensionar do buffer necessário para as versões seguras dessas funções (por exemplo, scanf_s, wscanf_setc..). No exemplo a seguir, a especificação de largura é 20, indicando que até 20 caracteres são para ser lido do fluxo de entrada.O comprimento do buffer é 21, que inclui o espaço para possíveis 20 caracteres, mais o terminador nulo:

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

Se o largura campo não for usado, scanf tentará ler o token de inteiro na seqüência. Se o dimensionar especificado não for grande o suficiente para armazenar o token 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 dimensionar

Os prefixos opcionais h, l, ll, I64, and L indicam o dimensionar do argument (longo ou curto, byte único caractere ou caracteres longa, 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 sistema autônomo mostrado na tabela a seguir. O tipo de prefixo I64 é uma extensão da Microsoft e não é compatível com ANSI.Os caracteres de tipo e seus significados são descritos na tabela a "Digite caracteres para funções scanf" emscanf digitar caracteres de campo.

Observação:

O h, l, and L prefixos são extensões da Microsoft quando usado com dados do tipo char.

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

Para especificar

Usar prefixo

Especificador de tipo

double

l

e, E, f, g, or G

dupla longa (mesmo sistema autônomo dupla)

L

e, E, f, g, or G

int longo

l

d, Eu, o, x, or X

int longo não assinado

l

u

long long

ll

d, Eu, o, x, or X

short int

h

d, Eu, o, x, or X

Short int não assinado

h

u

__Int64

I64

d, Eu, o, u, x, or X

Caractere de byte único com scanf

h

c or C

Caractere de byte único com wscanf

h

c or C

Caractere largo com scanf

l

c or C

Caractere largo com wscanf

l

c, or C

Um byte – seqüência de caractere com scanf

h

s or S

Um byte – seqüência de caractere com wscanf

h

s or S

Seqüência de caractere largos com scanf

l

s or S

Seqüência de caractere largos com wscanf

l

s or S

Os exemplos a seguir usam h and l with 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 no scanf família de produtos, omita o parâmetro de dimensionar que indica o comprimento do buffer do argumento anterior.

Seqüências de caracteres de leitura Undelimited

Ler as seqüências de caracteres não é delimitadas por caracteres de espaço em branco, um conjunto de caracteres entre colchetes ([ ]) pode ser substituído para o s caractere de tipo (seqüência).Conjunto de caracteres entre colchetes é chamado sistema autônomo 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 for um acento circunflexo (^), o efeito é invertido: O campo de entrada é ler até o primeiro caractere que esteja listado no restante do conjunto de caracteres.

Observe que % [a-z and % [z-a são interpretados sistema autônomo equivalente a %[abcde...z.Este é um comuns scanf função de extensão, mas observe que o padrão ANSI não o exige.

Seqüências de caracteres de leitura não finalizada

Para armazenar uma seqüência de caracteres sem armazenar um caractere nulo de terminação ('\0'), use a especificação de %nc where n é um número inteiro decimal.Nesse caso, a c tipo caractere 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.If n não for especificado, o valor padrão é 1.

Quando scanf interrompe a leitura a um campo

The scanf função verifica cada campo de entrada, caractere por caractere. Ele pode parar de ler um determinado campo de entrada antes de ele atingir um caractere de espaço para uma variedade de motivos:

  • A largura especificada foi alcançada.

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

  • O caractere a próximo conflita com um caractere na seqüência de caracteres de controle ele deve para corresponder.

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

Por qualquer motivo, quando o scanf função interrompe a leitura de um campo de entrada, o próximo campo de entrada é considerado como começar no primeiro caractere não lido. O caractere em conflito, se houver, será considerado não lidas e é o primeiro caractere do campo de entrada próximo 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: Funções scanf e wscanf

scanf digitar caracteres de campo