bcouto Posted July 11, 2012 at 01:56 PM Report #468354 Posted July 11, 2012 at 01:56 PM (edited) Boa Tarde, na realização do meu projecto eis que me deparo com outro erro, neste caso quando elimino um nó carregado de um ficheiro de texto, o programa deixa de responder e quando tento abrir o ficheiro este tem a sua informação toda em branco. A função pede um código ao utilizador, valida e se existir na lista ligada, esse nó deverá ser eliminado. Eis o código ao qual não sei se a abordagem será a mais correcta. no_emprestimo *EntregaEmprestimos(no_emprestimo *plista) { no_emprestimo *aux=plista, *ant=NULL; char codigo[18],now[80]; int i; struct tm *n; _int64 rawtime; time (&rawtime); n= localtime ( &rawtime ); strftime(now,80,"%d-%m-%Y",n); printf("\nData Actual:%s",now); do{ puts("\nISBN:***-*-**-******-* : "); fflush(stdin); gets(codigo); }while(codigo[3]!='-'||codigo[5]!='-'||codigo[8]!='-'||codigo[15]!='-'); while(aux && (strcmp(aux->emp.isbn,codigo))) { ant=aux; aux=aux->next; } if(aux == NULL) printf("Ocorreu um erro de validação"); else { if(ant == NULL) plista=aux->next; else ant->next=aux->next; free(aux); printf("O Documento com o ISBN %s foi eliminado da Lista de Empréstimos\n", codigo); } system("pause"); return plista; } Em seguida quando clico na função de mostragem da lista ligada, o projecto deixa de funcionar e o ficheiro.txt fica vazio e não apaga apenas aquele a que se referia a função. Se pudessem dar uma vista de olhos agradecia 😉 void MostraEmprestimo (no_emprestimo *plistaemp) { printf("\n"); printf("Nome: %s",plistaemp->emp.nome); printf("\nIsbn: %s",plistaemp->emp.isbn); printf("\nData de Requisição: %s",plistaemp->emp.datareq); printf("\nData de Entrega: %s",plistaemp->emp.dataent); printf("\nPrazo: %d\n",plistaemp->emp.prazo); printf("\n"); } void ApresentaEmprestimo(no_emprestimo *plistaemp) { if(plistaemp) while(plistaemp) { MostraEmprestimo(plistaemp); if(plistaemp!=NULL) plistaemp=plistaemp->next; } else printf("\n**** LISTA VAZIA ****\n"); } Edited July 11, 2012 at 02:11 PM by bcouto
pmg Posted July 11, 2012 at 04:14 PM Report #468381 Posted July 11, 2012 at 04:14 PM Como e que chamas a funcao EntregaEmprestimos()? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
bcouto Posted July 11, 2012 at 05:50 PM Author Report #468391 Posted July 11, 2012 at 05:50 PM Como e que chamas a funcao EntregaEmprestimos()? no_emprestimo *inicio=NULL; EntregaEmprestimos(inicio); break; Está num menu, mas é chamada assim no Case.
pmg Posted July 11, 2012 at 05:54 PM Report #468392 Posted July 11, 2012 at 05:54 PM Tal como eu pensava. No teu caso a variavel inicio nao 'e alterada pela chamada `a funcao. Para alterares a variavel ou alteras a funcao para aceitar um ponteiro para o ponteiro (senao a alteracao 'e feita apenas `a variavel local) ou, como ja puseste um 'return' na tua funcao, aproveita esse valor: inicio = EntregaEmprestimos(inicio) Para completar a ideia, a alteracao da funcao passaria pelo prototipo no_emprestimo *EntregaEmprestimos(no_emprestimo **plista); e chamando a funcao com o endereco do ponteiro no_emprestimo *inicio=NULL; EntregaEmprestimos(&inicio); What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
bcouto Posted July 12, 2012 at 01:03 AM Author Report #468429 Posted July 12, 2012 at 01:03 AM Tal como eu pensava. No teu caso a variavel inicio nao 'e alterada pela chamada `a funcao. Para alterares a variavel ou alteras a funcao para aceitar um ponteiro para o ponteiro (senao a alteracao 'e feita apenas `a variavel local) ou, como ja puseste um 'return' na tua funcao, aproveita esse valor: inicio = EntregaEmprestimos(inicio) Para completar a ideia, a alteracao da funcao passaria pelo prototipo no_emprestimo *EntregaEmprestimos(no_emprestimo **plista); e chamando a funcao com o endereco do ponteiro no_emprestimo *inicio=NULL; EntregaEmprestimos(&inicio); Resultou, problema resolvido 😉
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