Eu estou desenvolvendo um banco de dados mas a chave primaria está dando erro, ela verifica se codigo ja foi inserido e armazena ele mas se eu faço um cadastro e depois cadastro outro codigo e cadastro novamente o primeiro codigo ele "esquece" que o primeiro ja foi salvo quando na vdd deveria avisar que ele ja foi cadastrado. Vocês podem me ajudar por favor?
void salvar_cadastro()
{
fp=fopen("cadastro.bin","ab");
fwrite(&id.chave,sizeof(id.chave),1,fp);
fwrite(&id.nome,sizeof(id.nome),1,fp);
fwrite(&id.endereco,sizeof(id.endereco),1,fp);
fwrite(&id.excluido,sizeof(id.excluido),1,fp);
fclose(fp);
}
void salvar()
{
char salva;
gotoxy (10,7); printf("Deseja salvar cadastro? ('s'/ 'n'): ");
gotoxy (46,7); salva=getche();
if (salva =='s' || salva=='S')
{
fp=fopen("cadastro.bin","ab");
fwrite(&id.chave,sizeof(id.chave),1,fp);
fwrite(&id.nome,sizeof(id.nome),1,fp);
fwrite(&id.endereco,sizeof(id.endereco),1,fp);
fwrite(&id.excluido,sizeof(id.excluido),1,fp);
fclose(fp);
gotoxy(10,10); printf("Dados salvos com sucesso!");
}
if (salva == 'n'||salva == 'N')
{
gotoxy(10,10); printf("Dados não salvo!");
}
gotoxy(14,4); clreol();
gotoxy(16,5); clreol();
gotoxy(20,6); clreol();
gotoxy(46,7); clreol();
}
int chave_primaria() // verifica se o ID ja não existe
{
int C, aux_chave;
do
{
C=0;
gotoxy (14,4); scanf("%d", &aux_chave);
if (aux_chave == 0)
break;
while(fread( &id,sizeof(id),1,fp) == 1 && id.chave != aux_chave );
if( id.chave == aux_chave && (id.excluido=='n' || id.excluido=='N'))
{
fflush(stdin);
gotoxy(10,11); printf("ID já registrado! Digite novamente");
getch();
gotoxy(10,11);clreol();
gotoxy(14,4);printf(" ");
C=1;
}
}while(C==1);
return aux_chave;
}