Função de biblioteca C - fscanf ()
Descrição
A função da biblioteca C int fscanf(FILE *stream, const char *format, ...) lê a entrada formatada de um fluxo.
Declaração
A seguir está a declaração para a função fscanf ().
int fscanf(FILE *stream, const char *format, ...)
Parâmetros
stream - Este é o ponteiro para um objeto FILE que identifica o fluxo.
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 será como[=%[*][width][modifiers]type=], que é explicado abaixo -
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 * |
additional arguments- Dependendo da string de formato, a função pode esperar uma sequência de argumentos adicionais, cada um contendo um valor a ser inserido em vez de cada% -tag especificada no parâmetro de formato (se houver). Deve haver o mesmo número desses argumentos que o número de% -tags que esperam um valor.
Valor de retorno
Esta função retorna o número de itens de entrada correspondidos e atribuídos com sucesso, que pode ser menor do que o previsto, ou mesmo zero no caso de uma falha de correspondência antecipada.
Exemplo
O exemplo a seguir mostra o uso da função fscanf ().
#include <stdio.h>
#include <stdlib.h>
int main () {
char str1[10], str2[10], str3[10];
int year;
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We are in 2012", fp);
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
printf("Read String1 |%s|\n", str1 );
printf("Read String2 |%s|\n", str2 );
printf("Read String3 |%s|\n", str3 );
printf("Read Integer |%d|\n", year );
fclose(fp);
return(0);
}
Vamos compilar e executar o programa acima que produzirá o seguinte resultado -
Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2012|