aula 214

Como ler um arquivo texto com a função fscanf?

Dando continuidade ao estudo de manipulação de arquivos texto com a linguagem C em nosso Curso de Programação C, vamos aprender hoje como ler um arquivo com a função fscanf.

Na aula anterior aprendemos que a função fprintf é similar à função printf, ou seja, “imprime” informações em um arquivo texto. Isso leva a crer que a função fscanf seja similar à função scanf, lendo informações de um arquivo texto.

É exatamente isso. Da forma como usamos a função scanf para ler informações a partir do teclado, podemos usar a função fscanf para ler informações de um arquivo texto, exatamente da mesma forma.

Na aula anterior escrevemos em um arquivo o nome, a idade e a altura de três pessoas. Para ler estas mesmas informações com a função fscanf basta informarmos de qual arquivo será feita a leitura, quais tipos de dados serão lidos e onde serão salvos, assim:

     // lendo nome, idade e altura de um arquivo texto com a função fscanf
     fscanf(file, "%s%d%f", nome, &idade, &altura)

A linha de código acima irá ler uma linha do arquivo. Como ler todos as linhas do arquivo?

É simples ler todas as linhas do arquivo e para isso podemos utilizar o retorno da própria função fscanf. Ela retorna a quantidade de itens lidos ou -1 se não conseguir ler, ou seja, se encontrar o fim do arquivo. Assim, basta executarmos a leitura enquanto o retorno for diferente de -1, assim:

        // lendo todas as linhas do arquivo
        while(fscanf(file, "%s%d%f", nome, &idade, &altura) != -1)
            printf("\n\tNome: %s\n\tIdade: %d\n\tAltura: %.2f\n", nome, idade, altura);

Como foi dito na aula anterior, perceba que escrita e leitura em arquivo texto estão diretamente relacionados. A forma como os dados foram escritos podem facilitar ou dificultar sua leitura.

Código de exemplo completo em C para ler um arquivo texto com a função fscanf

/*
        Aula 214: Como ler um arquivo de texto com a função fscanf?

        Código escrito por Wagner Gaspar
        Junho de 2021

        Modos de abertura de arquivos:
        w -> Escrita
        r -> leitura
        a -> anexar
        r+ -> leitura e escrita
        w+ -> leitura e escrita (apaga o conteúdo caso o arquivo exista)
        a+ -> leitura e escrita (adiciona ao final do arquivo)
*/

void escrever(char f[]) {
    FILE *file = fopen(f, "w");
    char nome[100];
    int opcao, idade;
    float altura;

    if(file) {
        do{
            printf("Digite nome, idade e altura: ");
            scanf("%100[^\n]%d%f", nome, &idade, &altura);
            fprintf(file, "%s %d %.2f\n", nome, idade, altura);
            printf("\nDigite 1 para inserir outro registro. ");
            scanf("%d", &opcao);
            scanf("%c");
        }while(opcao == 1);
        fclose(file);
    } else
        printf("\nERRO ao abrir arquivo!\n");
}

void ler(char f[]) {
    FILE *file = fopen(f, "r");
    char nome[100];
    int idade;
    float altura;

    if(file){
        printf("\tDados lidos do arquivo:\n");
        while(fscanf(file, "%s%d%f", nome, &idade, &altura) != -1)
            printf("\n\tNome: %s\n\tIdade: %d\n\tAltura: %.2f\n", nome, idade, altura);
        fclose(file);
    }
    else
        printf("\nERRO ao abrir arquivo!\n");
}

int main() {

    char nome[] = {"conto.txt"};

    escrever(nome);
    ler(nome);

    return 0;
}

Deixe um comentário

dezessete + seis =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.