Dando continuidade ao estudo de manipulação de arquivos com a linguagem C, vamos aprender nesta aula como escrever em um arquivo com a função fprintf.
Perceba que a leitura correta de um arquivo está diretamente relacionada com a forma como os dados foram escritos no arquivo. Por isso há tantas funções diferentes para leitura e escrita em arquivo texto. Até o momento vimos apenas como escrever texto. Com a função fprintf veremos que também podemos escrever números.
A função fprintf é muito semelhante à função printf. Pense em tudo o que você já fez com a função printf. A função fprintf faz o mesmo, porém em um arquivo. Assim, usando %d, %s, %c, %f, conseguimos escrever qualquer informação em um arquivo texto.
Imagine que desejamos pedir ao usuário seu nome, idade e altura e salvar todos estes dados em um arquivo, isso pode ser feito assim:
// lendo nome, idade e altura e escrevendo em arquivo
printf("Digite nome, idade e altura: ");
scanf("%99[^\n]%d%f", nome, &idade, &altura);
fprintf(file, "%s %d %.2f\n", nome, idade, altura);
O primeiro parâmetro é o ponteiro para o arquivo onde iremos escrever. O segundo parâmetro é uma string que formata os dados. Perceba que primeiro vamos escrever o nome ( %s ) e em seguida há um espaço, depois a idade, outro espaço e a altura com duas casas decimais. Há também uma quebra de linha ao final para que não haja mais de um nome por linha. A última parte são as variáveis de onde virão estes dados, nome, idade e altura.
Se queremos ler nome, idade e altura de várias pessoas, basta então colocar o trecho de código acima dentro de uma repetição, assim:
do{
printf("Digite nome, idade e altura: ");
scanf("%99[^\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);
Código de exemplo completo em C para escrever em arquivo com a função fprintf
/*
Aula 213: Como escrever em um arquivo texto com a função fprintf?
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("%99[^\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");
}
int main() {
char nome[] = {"conto.txt"};
escrever(nome);
return 0;
}
