Fiz esse código usando pesquisa pela internet:
#include <stdio.h>
typedef struct {
char nome[50];
char cpf[11];
} Pessoa;
Pessoa pessoa[3];
void entrar_dados() {
int i;
for (i=0; i<3; i++) {
printf (">>> Registro numero: %d\n", i+1);
printf("Nome: ");
scanf("%[^\n]s", pessoa[i].nome);
getchar();
printf("CPF: ");
scanf("%[^\n]s", pessoa[i].cpf);
getchar();
}
}
int escrever_arquivo(Pessoa pessoa[])
{
int i;
int len_vet = sizeof(pessoa) - 1; // tamanho do vetor
FILE * arq;
// abre o arquivo para escrita no modo append (adiciona ao final)
arq = fopen("dados.bin", "ab");
if(arq != NULL)
{
for(i = 0; i < len_vet; i++)
// escreve cada elemento do vetor no arquivo
fwrite(&pessoa[i], sizeof(Pessoa), 1, arq);
fclose(arq); // aborta o programa
return 1;
}
else return 0;
}
int ler_arquivo(Pessoa aux_pessoas[3])
{
// abre o arquivo para leitura
FILE * arq = fopen("dados.bin", "rb");
if(arq != NULL)
{
int indice = 0;
while(1)
{
Pessoa p;
// fread ler os dados
// retorna a quantidade de elementos lidos com sucesso
size_t r = fread(&p, sizeof(Pessoa), 1, arq);
// se retorno for menor que o count, então sai do loop
if(r < 1)
break;
else
aux_pessoas[indice++] = p;
}
fclose(arq); // fecha o arquivo
return indice;
}
else return 0;
}
int main() {
int len_vet, i;
Pessoa aux_pessoas[3];
entrar_dados();
if (escrever_arquivo(pessoa)) {
len_vet = ler_arquivo(aux_pessoas);
if (len_vet == 0)
printf("\nErro ao abrir o arquivo para leitura!\n");
for(i = 0; i < len_vet; i++)
{
printf (">>> Registro numero: %d\n", i+1);
printf("Nome: %s\n", aux_pessoas[i].nome);
printf("CPF: %d\n", aux_pessoas[i].cpf);
}
} else printf("\nErro ao abrir o arquivo para leitura!\n");
return 0;
}
Com relação aos dados que entro pelo teclado e salvo no arquivo “dados.bin”, na hora de recuperar as informações, recupera nome direitinho, mas cpf não é exatamente o que inseri na entrada de dados.
É a primeira vez que lido com a parte de arquivos de C, e faz algum tempo que não mexo nessa linguagem. Esse programa para um trabalho da faculdade. O prazo para a entrega do trabalho é 20/11/2020.
Se alguém puder me ajudar a resolver esse problema, agradeço.
Aguardo retorno.
Obrigado,