Senhores, estou com um problema em um trecho de código aqui. Quando eu chamo a função para editar um registro em um arquivo .txt, ela aparentemente edita, porém apaga todos os outros registros. Creio que seja algum erro de lógica. Avaliem o código, por gentileza:
altera_reg()
{
int i, j, x, chave_busca[11];
char in_cpf=0, out_cpf[11];
arquivo=fopen("cadastro.txt","rw");
if (arquivo==NULL)
{
puts("Erro ao abrir o arquivo!\n");
}
printf("\nDigite o CPF do cadastro que deseja alterar: ");
for(i=0;i<11;i++)
{
if (((i-1) == 2)||((i-1) == 5)) printf(".");
if ((i-1) == 8) printf("-");
in_cpf = getch();
while ((in_cpf<48) || (in_cpf>57))
{
in_cpf=getch();
}
putch(in_cpf);
out_cpf[i]=in_cpf;
}
for(i=0;i<11;i++) chave_busca[i]=out_cpf[i]-48;
fread(&dados,sizeof(dados),1,arquivo);
while(!feof(arquivo))
{
for (i=0;i<11;i++)
{
if(dados.cpf[i]==chave_busca[i])
{
fseek(arquivo,sizeof(dados),SEEK_CUR);
j=TRUE;
}
}
fread(&dados,sizeof(dados),1,arquivo);
}
if (j!=TRUE) printf("\n\nCadastro não encontrado!");
else
{
arquivo=fopen("cadastro.txt","wb");
if(arquivo==NULL) printf("\nErro ao abrir o arquivo: ");
cont++;
dados.code=cont;
printf("\n\nNome: ");
fflush(stdin);
gets(dados.nome);
printf("\nEndereco: ");
fflush(stdin);
gets(dados.ende);
printf("\nTelefone: ");
fflush(stdin);
gets(dados.fone);
printf("\nRG: ");
fflush(stdin);
gets(dados.rg);
digitacpf();
validacpf();
for (x=0;x<11;x++) dados.cpf[x]=cpf[x];
printf("\n\nAlteracao realizada com sucesso!\n\n");
fwrite(&dados,sizeof(dados),1,arquivo);
fclose(arquivo);
}
}
Pergunta
steel_sp
Senhores, estou com um problema em um trecho de código aqui. Quando eu chamo a função para editar um registro em um arquivo .txt, ela aparentemente edita, porém apaga todos os outros registros. Creio que seja algum erro de lógica. Avaliem o código, por gentileza:
Obrigado!
Editado por steel_spLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.