Ir para o conteúdo
Nitrous

problema a eliminar 1º elemento de uma lista ligada

Mensagens Recomendadas

Nitrous    0
Nitrous

Boas,

o problema com que me deparei neste momento foi de eliminar o 1º elemento da lista ligada.

E o seguinte:

seja qual for o elemento que quiser eliminar (excepto o 1º) apos o eliminar ja nao aparece quando faço a listagem.. mas caso queira eliminar o 1º.. quando vou a fazer a listagem no lugar onde estava o 1º elemento aparece como se o elemento tivesse informaçao "corrompida" :dontgetit:

Eis o codigo:

fichaCurso.h

#ifndef FICHACURSO_H
#define FICHACURSO_H
#define MAX_NOME 100
#define MAX_DESCRICAO 300

typedef struct TFichaCurso
{
    char nomeCurso[MAX_NOME+1];
    char descricaoCurso[MAX_DESCRICAO+1];
    unsigned short cicloCurso;
    struct TFichaCurso *fichaSeguinte;
} Elemento, *Ficha;

Ficha inserirCurso(Ficha fichaCurso);
void listarCursos(Ficha fichaCurso);
Ficha removerCurso(Ficha fichaCurso, char nome[]);
Ficha pesquisaCurso(Ficha fichaCurso, char nome[]);
#endif

fichaCurso.c

Ficha removerCurso(Ficha fichaCurso, char nome[])
{
    Ficha fichaEliminar;
    if(fichaCurso)
    {
        fichaEliminar = pesquisaCurso(fichaCurso, nome);
        if(fichaEliminar!=fichaCurso)
        {
            for(;fichaCurso->fichaSeguinte != fichaEliminar; fichaCurso = fichaCurso->fichaSeguinte);
            fichaCurso->fichaSeguinte = fichaEliminar->fichaSeguinte;
            free(fichaEliminar);                
            return fichaCurso;
        }
        else if(fichaEliminar == fichaCurso){
             fichaCurso = fichaEliminar->fichaSeguinte;
             free(fichaEliminar);
             return fichaCurso;}
        else
            printf("Nao existem cursos com o nome pretendido.\n");
    }
    else
    {
        fprintf(stderr, "Nao existem cursos.\n");
        system("pause");
        system("cls");
    }
}

Ficha pesquisaCurso(Ficha fichaCurso, char nome[])
{
      Ficha fichaPesquisa;
      for(fichaPesquisa=fichaCurso;fichaPesquisa;fichaPesquisa = fichaPesquisa->fichaSeguinte)
       if(strcmp(fichaPesquisa->nomeCurso,nome)==0)
           return fichaPesquisa;
}

Espero que me possam dar umas "luzes" :(

Obrigado pela atençao.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Entre vários problemas que tens no código, como por exemplo não ter um return em todas as execuções possíveis de pesquisarCurso, na função main (ou onde chamares a função removerCurso) tens que afectar a Ficha que passas como parâmetro com o resultado da função, senão vai ficar a apontar para a Ficha que apagaste.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nitrous    0
Nitrous

Ja consegui resolver o problema.. :-[

Nao estava a guardar a lista que a funçao removerCurso devolvia :-[, ou seja, ao chamar a funçao no menu tinha:

removerCurso(cursos,nome)

em vez de ter

cursos = removerCurso(cursos,nome)

  :(

Obrigado pela ajuda :thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade