Função de biblioteca C - sscanf ()
Descrição
A função da biblioteca C int sscanf(const char *str, const char *format, ...) lê a entrada formatada de uma string.
Declaração
A seguir está a declaração para a função sscanf ().
int sscanf(const char *str, const char *format, ...)
Parâmetros
str - Esta é a string C que a função processa como sua fonte para recuperar os dados.
format- Esta é a string C que contém um ou mais dos seguintes itens: caractere de espaço em branco, caractere de não espaço em branco e especificadores de formato
Um especificador de formato segue este protótipo: [=% [*] [largura] [modificadores] tipo =]
Sr. Não. | Argumento e Descrição |
---|---|
1 | * Este é um asterisco inicial opcional, que indica que os dados devem ser lidos do fluxo, mas ignorados, ou seja, não são armazenados no argumento correspondente. |
2 | width Isso especifica o número máximo de caracteres a serem lidos na operação de leitura atual. |
3 | modifiers Especifica um tamanho diferente de int (no caso de d, i e n), unsigned int (no caso de o, u e x) ou float (no caso de e, f e g) para os dados apontados pelo argumento adicional correspondente: h: short int (para d, i e n), ou unsigned short int (para o, u e x) l: long int (para d, i e n), ou unsigned long int (para o, u e x), ou duplo (para e, f e g) L: duplo longo (para e, f e g) |
4 | type Um caractere que especifica o tipo de dados a serem lidos e como se espera que sejam lidos. Veja a próxima tabela. |
especificadores de tipo fscanf
tipo | Entrada de qualificação | Tipo de argumento |
---|---|---|
c | Caractere único: Lê o próximo caractere. Se uma largura diferente de 1 for especificada, a função lê os caracteres de largura e os armazena nos locais sucessivos da matriz passada como argumento. Nenhum caractere nulo é anexado ao final. | Caracteres * |
d | Número inteiro decimal: número opcionalmente precedido por um sinal + ou - | int * |
e, E, f, g, G | Ponto flutuante: número decimal contendo um ponto decimal, opcionalmente precedido por um sinal + ou - e opcionalmente seguido pelo caractere e ou E e um número decimal. Dois exemplos de entradas válidas são -732.103 e 7.12e4 | float * |
o | Octal Inteiro: | int * |
s | Sequência de caracteres. Isso lerá os caracteres subsequentes até que um espaço em branco seja encontrado (os caracteres de espaço em branco são considerados em branco, nova linha e tabulação). | Caracteres * |
você | Inteiro decimal sem sinal. | unsigned int * |
x, X | Número inteiro hexadecimal | int * |
other arguments - Esta função espera uma sequência de ponteiros como argumentos adicionais, cada um apontando para um objeto do tipo especificado por sua% -tag correspondente dentro da string de formato, na mesma ordem.
Para cada especificador de formato na string de formato que recupera dados, um argumento adicional deve ser especificado. Se você deseja armazenar o resultado de uma operação sscanf em uma variável regular, você deve preceder seu identificador com o operador de referência, ou seja, um sinal de e comercial (&), como: int n; sscanf (str, "% d", & n);
Valor de retorno
Em caso de sucesso, a função retorna o número de variáveis preenchidas. No caso de uma falha de entrada antes que qualquer dado pudesse ser lido com sucesso, EOF é retornado.
Exemplo
O exemplo a seguir mostra o uso da função sscanf ().
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
Vamos compilar e executar o programa acima que produzirá o seguinte resultado -
March 25, 1989 = Saturday