Enviado em 14/09/2018 - 16:20h
Boa tarde pessoal,
Estou com uma dúvida. Estou estudando C e me deparei com um problema no meu código. Tenho um tipo de dado abstrato chamado cliiente. O tipo cliente possui um vetor de X posições para um tipo de dado chamado Projeto. O que não consegui compreender é o seguinte:
Toda variavel do tipo projeto tem um ponteiro do tipo cliente que armazena o endereço de memória do seu respectivo cliente. E toda variavel do tipo projeto possui um vetor de ponteiros para o tipo projeto. (Cada cliente pode ter N projetos, mas cada projeto pertence somente a um cliente).
Quando excluo um cliente eu faço todo o meu vetor de clientes a partir da posição a ser excluida voltar uma posição. Como a variavel do tipo cliente tem um vetor de projetos e armazena o endereço dos projetos cadastradas consigo mover as posicoes do cliente sem perder os projetos que ela possui. Porém nas variaveis do tipo projeto eu armazeno o endereço de uma variavem do tipo cliente, entao quando eu mudo as posições do meu vetor de cliente, o endereço armazenado no ponteiro dentro do variavel projeto precisa ser alterado para que ele aponte para o cliente correto.
A seguir esta o codigo da minha função de excluir projetos, eu imaginei que desta forma iria funcionar, porém o programa encerra a execução assim que recebe a confirmação da usuário para a exclusão.
Desculpe pelo texto longo, tentei sintetizar da melhor forma o prolema. Se alguem puder me ajudar a entender o porque a miha lógica não funcionou e me explicar a lógica correta eu agradeço
Estou com uma dúvida. Estou estudando C e me deparei com um problema no meu código. Tenho um tipo de dado abstrato chamado cliiente. O tipo cliente possui um vetor de X posições para um tipo de dado chamado Projeto. O que não consegui compreender é o seguinte:
Toda variavel do tipo projeto tem um ponteiro do tipo cliente que armazena o endereço de memória do seu respectivo cliente. E toda variavel do tipo projeto possui um vetor de ponteiros para o tipo projeto. (Cada cliente pode ter N projetos, mas cada projeto pertence somente a um cliente).
Quando excluo um cliente eu faço todo o meu vetor de clientes a partir da posição a ser excluida voltar uma posição. Como a variavel do tipo cliente tem um vetor de projetos e armazena o endereço dos projetos cadastradas consigo mover as posicoes do cliente sem perder os projetos que ela possui. Porém nas variaveis do tipo projeto eu armazeno o endereço de uma variavem do tipo cliente, entao quando eu mudo as posições do meu vetor de cliente, o endereço armazenado no ponteiro dentro do variavel projeto precisa ser alterado para que ele aponte para o cliente correto.
A seguir esta o codigo da minha função de excluir projetos, eu imaginei que desta forma iria funcionar, porém o programa encerra a execução assim que recebe a confirmação da usuário para a exclusão.
Desculpe pelo texto longo, tentei sintetizar da melhor forma o prolema. Se alguem puder me ajudar a entender o porque a miha lógica não funcionou e me explicar a lógica correta eu agradeço
void excluirCliente (cliente *p, projeto *pPro, int *contCli, int *contPro){
int del;
int i=pesquisaCliente(p, contCli);//Recebe como resultado a posição no vetor do cliente a ser excluido
int a = i, c, b=0;
if (i>-1){
printf("\nDeseja excluir este Cliente? <1 - Sim / 0 - Não>");
scanf("%d",&del);
if(del==1){
while(i<(*contCli)){
p[i]=p[i+1];
while (b<(p[i].lista)){//roda o laço em todo o vetor de ponteiros para projetos dentro de cliente
p[i].codigo[b]->cli=&p[i];
b++;
}
b=0;
i++;
}
(*contCli)--;
}
printf("\nCliente Excluido com sucesso");
}
}