Ir para conteúdo
Fórum Script Brasil
  • 0

Excluir registro em arquivo - c


Bruno Pacheco

Pergunta

Nó código abaixo tem-se duas funcões uma que busca o código do cliente e a outra que exclui um registro de um cliente de uma determinada posição.A minha dúvida é como fazer uma outra função qualquer só que excluindo um registro de um vetor num arquivo?

// Busca por código
int busca_codigocli(cliente clien[]){
    int cont=0,cod;

            printf("\nEntre com o codigo\n");
        scanf("%d",&cod);

        while(cont<=50) {
                if(clien[cont].codigo==cod){
                        return cont;
                }
                else{
                        cont++;
                }
    }
        return -1;                    
}



//Excluir Cliente


void excluir_cliente(cliente clien[],int *indice) {
int cod, cont=0,y;
//printf("\nEntre com o codigo do registro que deseja excluir\n");
//scanf("%d",&cod);

y=busca_codigocli(clien);

        if (y==-1) 
                printf("\nCodigo não encontrado\n\t");
        else{
                 for (cont=y+1;cont<*indice+1;cont++) {//1 ao 50
                     clien[cont-1].codigo=clien[cont].codigo; 

//O registro da posicao anterior  do vetor é sobrescrito com o proximo registro da próxima posição.(ex. pos 0 é substituido pela pos 1);


                        
                }
                printf("\nExclusao feita com sucesso\n\t");
                *indice=*indice-1;
        }
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Tá bom eu tenho duas funções uma que exclui um registro de um vetor e outra que consulta o registro que se quer excluir do vetor. Tudo isso em arquivo.

O que eu quero saber é o seguinte se eu quisesse nessas funções ao invés de fazer um vetor de registro fazer uma matriz de registro o que mudaria então nessas duas funções abaixo?

// Função Exclui um registro do arquivo
// Retorna:
// 
//1 se o registro foi excluído com sucesso
// 
//0 se o registro não pode ser excluído
//

Exclui_registro(FILE *arquivo, Registro registro)
{
  int posicao;

   if(arquivo != NULL){
       posicao = Consulta_registro(arquivo, registro);
       if(posicao != -1)
     {

     fseek(arquivo, posicao*sizeof(registro), SEEK_SET);
     registro.excluido = 1;
     if(fwrite(&registro, sizeof(registro), 1, arquivo))
        return 1;
     }

   }
   return 0;
}


// Função que consulta um registro do arquivo
// Retorna a posição física onde o registro foi encontrado ou
// -1 caso o registro não tenha sido encontrado
//
Consulta_registro(FILE *arquivo, Registro registro)
{
   Registro registro_lido;
   int posicao;

  if(arquivo != NULL)
  {
   fseek(arquivo, 0L, SEEK_SET);
   posicao = 0;
   // repete enquanto não chega ao final do arquivo 
   while(fread(&registro_lido, sizeof(registro_lido), 1,  arquivo))
   {
   if(strcmpi(registro_lido.nome, registro.nome)==0 &&     (registro_lido.excluido == 0))
   return posicao;
   posicao++;
   };
  }
  return -1;
}

Editado por Bruno Pacheco
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...