Nitrous Posted June 11, 2009 at 02:37 AM Report #271413 Posted June 11, 2009 at 02:37 AM 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.
TheDark Posted June 11, 2009 at 04:10 AM Report #271414 Posted June 11, 2009 at 04:10 AM 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. Desaparecido.
Nitrous Posted June 11, 2009 at 04:37 PM Author Report #271489 Posted June 11, 2009 at 04:37 PM 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 👍
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now