Ir ao conteúdo
  • Cadastre-se

Ajuda com função excluir em arquivo!


Calaça

Posts recomendados

Olá, estou tendo problemas com a função excluir do meu código. Se houver dois registros com o mesmo nome, a função não excluir não faz nada com ambos registros. :( Abaixo segue o trecho o a função:


void excluir (){
registro reg;
int ident,idsoma,flag=0;
char gravar,op;
char x[20];
printf ("Digite o nome do aluno para fazer a consulta: ");
fflush (stdin);
gets (x);

arq = fopen("WORKC.bin", "r+b");

rewind(arq);

do{
fread (®, sizeof(registro), 1, arq);
//comparando o que foi digitado e o nome
if ((strcmp (x, reg.nome)==0) && feof (arq)==0){
mostrar(reg);
ident = reg.id-1;
flag = 1;
}
}while( (feof(arq)==0) && (strcmp ( x , reg.nome) != 0 ));

if ( flag == 1 )
{
printf("\n\t\tDeseja alterar esse registro ? ( y ) ( n ).\n");

fflush(stdin);
op = getch();

if ( op == 'y')
{
system ("cls");

fseek (arq, ident, SEEK_SET);
idsoma=ident+ident;
if (idsoma == 0){
idsoma = 92;
}
while (ident < idsoma){
gravar = '\0';
fwrite (&gravar, sizeof(char), 1, arq);
ident++;
}
printf("\n\t\t\t\tExcluido com sucesso!");
Sleep(2000);
}
}
else
{
printf("\n\n\t\tNao foi encontrado nenhum registro com esse nome\n");
getch();
}
fclose(arq);

}

Agradeço desde já.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Olá, estou tendo problemas com a função excluir do meu código. Se houver dois registros com o mesmo nome, a função não excluir não faz nada com ambos registros. :( Abaixo segue o trecho o a função

Não vejo relação entre um ou mais registros iguais... aparentemente o problema não é esse...

Mas vamos lá:

Nesse trecho:

do {
fread(®, sizeof(registro), 1, arq);
//comparando o que foi digitado e o nome
if ((strcmp (x, reg.nome)==0) [B]&& feof (arq)==0)[/B]{
mostrar(reg);
ident = reg.id-1;
flag = 1;
}
} while( [B](feof(arq)==0)[/B] && (strcmp ( x , reg.nome) != 0 ));

Esse feof(arq)==0 serve para verificar se o arquivo chegou ao fim, correto? Se sim, porque verificar isso ao comparar com o nome a ser excluído?

Está assim:

se (nome da pesquisa = nome lido no arquivo) e (chegou ao fim do arquivo)

E no While não seria o oposto?

Está assim:

Enquanto ([B]chegou ao fim do arquivo[/B]) e (arquivo ainda não encontrado) 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...