
ceifatron
(usa Outra)
Enviado em 09/04/2018 - 18:00h
Galera, preciso de ajuda com o seguinte problema no meu código de Lista duplamente encadeada em C. Precisamente na função de alterar dados de um nó na lista. O problema é que a alteração só funciona no ultimo nó feito, ou seja, no ultimo dado armazenado. A função altera o dado normalmente e retorna a lista porém caso eu queira alterar o 1° nó que eu coloquei a lista simplesmente é excluída. Eis abaixo o código da função busca, altera, e o chamado na main.
Lista* lDE_busca (Lista* l, int v)
{
Lista* p;
for (p=l; p!=NULL; p=p->prox)
if (p->ordem_Servico.id == v)
return p;
return NULL;
}
Lista* lDE_altera (Lista* l, OS v, int opcao)
{
Lista* p;
int x,y,z;
char nome[txt_pq];
for (p=l; p!=NULL; p=p->prox){
if (p->ordem_Servico.id == v.id)
{
if(opcao==1)
{
printf("Digite a nova data de execucao: \n");
printf("Dia: ");
scanf("%d", &x);
printf("\n");
printf("Mes: ");
scanf("%d",&y);
printf("\n");
printf("Ano: ");
scanf("%d", &z);
p->ordem_Servico.dataExecucao.dia = x;
p->ordem_Servico.dataExecucao.mes = y;
p->ordem_Servico.dataExecucao.ano = z;
return p;
}
else if(opcao==2)
{
printf("Digite o novo nome da Atividade: \n");
scanf("\n%[^\n]", &nome);
strcpy(p->ordem_Servico.nomeAtividade,nome);
return p;
}
else if(opcao==3)
{
printf("Digite o novo nome do Trabalhador: \n");
scanf("\n%[^\n]", &nome);
strcpy(p->ordem_Servico.nomeTrabalhador,nome);
return p;
}
else if (opcao==4)
{
printf("Digite a nova funcao do trabalhador: \n");
scanf("\n%[^\n]", &nome);
strcpy(p->ordem_Servico.funcao,nome);
return p;
}
else if(opcao==5)
{
printf("Digite a nova Descricao da Ordem de Servico: \n");
scanf("\n%[^\n]", &nome);
strcpy(p->ordem_Servico.descricao,nome);
return p;
}
}
}
return NULL;
}
MAIN
printf("Digite o ID da OS que vc deseja editar: ");
printf("\n");
scanf("%d",&auxIDeditar);
l = lDE_busca(l,auxIDeditar);
lDE_imprime(l);
printf("\n");
printf("O que vc deseja alterar? \n");
printf("\t [1]: Data de Execucao\n");
printf("\t [2]: Nome da Atividade\n");
printf("\t [3]: Nome do Trabalhador Responsavel\n");
printf("\t [4]: Funcao do Trabalhador\n");
printf("\t [5]: Descricao da OS\n");
printf("\t [0]: CANCELAR\n");
scanf("%d",&opcao_Editar);
if((l = lDE_busca(l,auxIDeditar)) != NULL)
{
l = lDE_altera(l,Nova_Ordem,opcao_Editar);
} else
{
printf("Elemento n encontrado.");
}