Olá Junior. Então... Fiz o que você indicou, e o processo de gravação tah dando certo. O problema é na função que exibe o conteúdo do arquivo, ela está sempre duplicando o último registro. Se eu cadastro, um exemplo, Maria, e gravo no arquivo, na hora de imprimir na tela o registro aparece duas vezes. Isso só acontece com o último registro cadastrado. Ou seja o problema não é no arquivo, nem na gravação e sim na função que a exibe. Obrigado. Segue o código: ---------------------------GRAVANDO NO ARQUIVO----------------------------- void gravaNoArquivo(){
int op=1;
celula *elemento;
FILE *arq;
arq=fopen ("agenda.dat", "a+b");
if (! arq )
printf (" Erro ao abrir arquivo !");
else{
while (op!=0){
elemento=malloc(sizeof(celula));
if(elemento==NULL){
printf("\nErro ao Alocar!");
}else{
if(cabeca->tamanho==0)
elemento->proximo=NULL;
else
elemento->proximo = cabeca->inicio;
cabeca->inicio=elemento;
cabeca->tamanho++;
getchar();
printf("\nDigite o nome:" );
gets(elemento->dados.nome);
printf("\nDigite o Numero do Telefone: ");
scanf("%d", &elemento->dados.telefone);
fwrite (&elemento->dados, sizeof (struct informacoes), 1, arq );
printf (" Deseja gravar mais dados (1/0)? ");
scanf ("%d", &op );
}
}
fclose (arq);
}
}
---------------------------LENDO O ARQUIVO-----------------------------
void lerArquivo(){
struct provisorio
{
long int telefone;
int cod_area;
char nome[50], cidade[20], obs[200];
};
typedef struct provisorio repositorio;
repositorio repo;
FILE *arq;
arq= fopen ("agenda.dat", "rb");
if (! arq )
printf ("Erro ao abrir arquivo !");
else{
printf ("\n*** Agenda - Relatorio ***\n");
do{
/* o dado é lido e armazenado na estrutura */
fread (&repo , sizeof (repositorio), 1, arq );
printf ("\nNome: %s", repo.nome );
printf ("\tFone: %ld\n\n", repo.telefone );
}while (!feof(arq));
fclose (arq);
}
}