Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Calaça

[Resolvido] Ajuda com função excluir em arquivo!

Recommended Posts

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á.

Editado por dif
tag code

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

Os registros possuem um ID único ?

Você pode buscar pelo nome, apresentar o que ele achou e retornar o ID juntamente com o nome.

Assim você não tem problema com registros duplicados.

[]'s

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Realmente! Não havia pensado nisso. Problema resolvido!

    Obrigada aos dois pela atenção.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×