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|