scanf
caracteres de campo de tipo
As informações a seguir se aplicam a qualquer função da família de funções scanf
, incluindo as versões seguras como scanf_s
.
O caractere type
é o único campo de formato necessário; ele aparece depois de quaisquer campos de formato opcionais. O caractere type
determina se o argumento associado é interpretado como um caractere, uma cadeia de caracteres ou um número.
type
Caracteres para funções scanf
Caractere | Tipo de entrada esperado | Tipo de argumento | Argumento de tamanho na versão segura? |
---|---|---|---|
c |
Caractere. Quando usado com funções scanf , especifica o caractere de byte único; quando usado com funções wscanf , especifica o caractere largo. Caracteres de espaço em branco que normalmente são ignorados são lidos quando c é especificado. Ao contrário de outros campos de tipo, o especificador de largura do campo indica o número exato de caracteres, não o máximo. Para ler o próximo caractere de byte único que não é espaço em branco, use %1s ; para ler o próximo caractere largo que não é espaço em branco, use %1ws . |
Ponteiro para char quando usado com funções scanf , ponteiro para wchar_t quando usado com funções wscanf . |
Obrigatória. O tamanho não inclui espaço para um terminador nulo. |
C |
Caractere de tamanho oposto. Quando usado com funções scanf , especifica o caractere largo; quando usado com funções wscanf , especifica o caractere de byte único. Caracteres de espaço em branco que normalmente são ignorados são lidos quando C é especificado. Ao contrário de outros campos de tipo, o especificador de largura do campo indica o número exato de caracteres, não o máximo. Para ler o próximo caractere de byte único que não é espaço em branco, use %1s ; para ler o próximo caractere largo que não é espaço em branco, use %1ws . |
Ponteiro para wchar_t quando usado com funções scanf , ponteiro para char quando usado com funções wscanf . |
Obrigatória. O argumento de tamanho não inclui espaço para um terminador nulo. |
d |
Inteiro decimal. | Ponteiro para int . |
Não. |
i |
Um inteiro. Hexadecimal se a cadeia de caracteres de entrada começa com "0x" ou "0X", octal se a cadeia de caracteres começa com "0", caso contrário, decimal. | Ponteiro para int . |
Não. |
o |
Inteiro octal. | Ponteiro para int . |
Não. |
p |
Um endereço de ponteiro em dígitos hexadecimais. O número máximo de dígitos lidos depende do tamanho de um ponteiro (32 bits ou 64 bits), que depende da arquitetura da máquina. "0x" ou "0X" são aceitos como prefixos. | Ponteiro para void* . |
Não. |
u |
Inteiro decimal sem sinal. | Ponteiro para unsigned int . |
Não. |
x |
Inteiro hexadecimal. | Ponteiro para int . |
Não. |
e , E , f , F , g , , G |
Valor de ponto flutuante consistindo de um sinal opcional (+ ou -), de uma série de um ou mais dígitos decimais que contém o ponto decimal e também de um expoente opcional ("e" ou "E"), seguido por um valor inteiro com sinal opcionalmente. | Ponteiro para float . |
Não. |
a , A |
Valor de ponto flutuante que consiste em uma série de um ou mais dígitos hexadecimais com um ponto decimal opcional e um expoente ("p" ou "P") seguido de um valor decimal. | Ponteiro para float . |
Não. |
n |
Nenhuma entrada lida do fluxo ou buffer. | Ponteiro para int , no qual é armazenado o número de caracteres lidos com êxito do fluxo ou buffer até esse ponto na chamada atual para funções scanf ou funções wscanf . |
Não. |
s |
Cadeia de caracteres, até o primeiro caractere de espaço em branco (espaço, tabulação ou nova linha). Para ler cadeias de caracteres não delimitadas por caracteres de espaço, use o conjunto de colchetes ([ ] ), conforme discutido em scanf Especificação de largura scanf Width. |
Quando usado com funções scanf , significa matriz de caracteres de byte único; quando usado com funções wscanf , significa matriz de caracteres largos. Em ambos os casos, a matriz de caracteres deve ser grande o suficiente para o campo de entrada mais o caractere nulo de terminação, que é anexado automaticamente. |
Obrigatória. O tamanho inclui espaço para um terminador nulo. |
S |
Cadeia de caracteres de tamanho oposto, até o primeiro caractere de espaço em branco (espaço, tabulação ou nova linha). Para ler cadeias de caracteres não delimitadas por caracteres de espaço, use o conjunto de colchetes ([ ] ), conforme discutido em scanf Especificação de largura scanf Width. |
Quando usado com funções scanf , significa matriz de caracteres largos; quando usado com funções wscanf , significa matriz de caracteres de byte único. Em ambos os casos, a matriz de caracteres deve ser grande o suficiente para o campo de entrada mais o caractere nulo de terminação, que é anexado automaticamente. |
Obrigatória. O tamanho inclui espaço para um terminador nulo. |
Os argumentos de tamanho, se necessário, devem ser passados na lista de parâmetros imediatamente após o argumento ao qual se aplicam. Por exemplo, o código a seguir:
char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);
lê uma cadeia de caracteres com um comprimento máximo de 10 em string1
e uma cadeia de caracteres com um comprimento máximo de 8 em string2
. Os tamanhos de buffer devem ser maiores do que as especificações de largura por pelo menos uma unidade, já que o espaço deve ser reservado para o terminador nulo.
A cadeia de caracteres de formato pode lidar com a entrada de caracteres de byte único ou largos independentemente de qual versão da função é usada, de caractere largo ou de caractere de byte único. Portanto, para ler caracteres de byte único ou largos com funções scanf
e funções wscanf
, use os especificadores de formato conforme descrito a seguir.
Para ler o caractere como | Use esta função | Com estes especificadores de formato |
---|---|---|
byte único | Funções scanf |
c , hc ou hC |
byte único | Funções wscanf |
C , hc ou hC |
largos | Funções wscanf |
c , lc ou lC |
largos | Funções scanf |
C , lc ou lC |
Para examinar cadeias de caracteres com funções scanf
e funções wscanf
, use a tabela acima com os especificadores de tipo de formato s
e S
em vez de c
e C
.