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; }