Além de armazenar informações em arquivos, os programas frequentemente precisam recuperar dados previamente gravados.

A leitura de arquivos permite que informações persistentes sejam carregadas para a memória do programa, possibilitando sua utilização em cálculos, consultas, relatórios e diversas outras funcionalidades.

Assim como ocorre com a escrita, a linguagem C disponibiliza funções específicas para leitura de dados em arquivos. Muitas dessas funções são semelhantes às funções de entrada padrão que já utilizamos ao longo da disciplina.


A função fscanf

A função fscanf() é equivalente à função scanf(), porém realiza a leitura a partir de um arquivo.

Sua sintaxe é:

int fscanf(FILE *arquivo, const char *formato, ...);

O primeiro parâmetro indica o arquivo de onde os dados serão lidos.

Suponha que o arquivo aluno.txt possua o seguinte conteúdo:

Joao
8.5

Podemos realizar a leitura da seguinte forma:

#include <stdio.h>

int main() {
    char nome[50];
    float nota;

    FILE *arquivo = fopen("aluno.txt", "r");

    if (arquivo != NULL) {
        fscanf(arquivo, "%s", nome);
        fscanf(arquivo, "%f", &nota);

        printf("Nome: %s\n", nome);
        printf("Nota: %.1f\n", nota);

        fclose(arquivo);
    }

    return 0;
}

Saída:

Nome: Joao
Nota: 8.5

Valor de retorno de fscanf

A função retorna a quantidade de variáveis que foram lidas com sucesso.

Por exemplo:

int quantidade = fscanf(arquivo, "%d %d", &a, &b);