Listas Encadeadas - Função Excluir

7 respostas
paloma

Alguém pode me dar uma ajuda com a função excluir?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

typedef struct Biblioteca{
        char livros[51];
        struct Biblioteca *prox;
}TBiblioteca;

//VARIÁVEL GLOBAL
TBiblioteca *lista;
char livros[51];

//FUNÇÃO LISTA VAZIA
TBiblioteca *lse_vazia()
{
   return NULL;
}           

//FUNÇÃO REGISTRAR LIVROS
TBiblioteca *Incluir_Livros()
{
    TBiblioteca *ptr;
    
    ptr=(TBiblioteca*)calloc(1,sizeof(TBiblioteca));
    strcpy(ptr->livros,livros);
    ptr->prox=NULL;
    
    if (lista==NULL)
    {
      ptr = lista;
    }
    else
    {
        ptr->prox=lista;
        lista=ptr;
    }    
}

//FUNÇÃO LISTAR
TBiblioteca *Listar_Livros()
{
   TBiblioteca *aux;
   aux=lista;
   
   while(aux!=NULL)
   {
     printf ("Nome do Livro: %s",aux->livros);
   }
}     
            
//FUNÇÃO EXCLUIR LIVROS
TBiblioteca *Excluir_Livros()
{
    TBiblioteca *aux1;
    TBiblioteca *aux2;
    
    Incluir_Livros();
    
     aux2 = NULL;
     aux1 = lista;

     while (aux1!=NULL &&(strcmp(aux1-> livros,livros)!=0)
     {
            aux2 = aux1;
            aux1 = aux1 -> prox;
     }
           
     if (aux2 == NULL)
     {
              lista = aux1 -> prox;
     }

     else
     {
         aux2 -> prox = aux1 -> prox;
     }

     free (aux1);

     printf ("O nome do livro foi excluido \n");
}
                 
//FUNÇÃO PRINCIPAL                    
int main ()
{
    char op;
    lista=lse_vazia();
    
    do{
        system ("cls");
        printf ("(I)ncluir\n");
        printf ("(L)istar\n");
        printf ("(E)xcluir\n");
        printf ("(S)air\n");
        printf ("\n");
        printf ("Digite a opcao: ");
        
        op = toupper (getche());
        
        switch(op)
        {
          case 'I': Incluir_Livros();
          break;
          
          case 'L': Listar_Livros();
          break;
          
          case 'E': Excluir_Livros();
          break;
          
          default: printf ("Opcao Invalida\n\n");
       }
       system ("PAUSE");
       
       }while(op!='S');
                  
    return (0);
}

7 Respostas

David

Hmm… Me responda umas coisinhas… O que está acontecendo de errado? Por que você chama Incluir_Livros() dentro de Excluir_Livros()? Outra coisa, depois do while você deveria testar se aux1 é null, e não aux2, ou não? E a “String” livros, você não está iniciando com nada? As outras funções estão funcionando?

paloma

Não sei pq estava chamando a função incluir na excluir :oops:

Não entendi pq vc falou que a string não está sendo iniciada com nada

O programa ñ tá rodando :cry:

David

Olha, você fez um struct que contém o nome do livro (char livros[51]) e um ponteiro para o próximo livro da lista. O que eu quis dizer é que você não está informando em canto nenhum o nome do livro, certo? Então eu acho que isso está faltando no seu programa: primeiro, ao incluir, perguntar o título do livro que você quer incluir e guardar esse valor na variável global livros para depois copiá-lo para o nó da lista; e ao excluir perguntar qual o livro que você deseja excluir, guardar o valor em livros para poder depois comparar esse título com os dos outros livros da lista.

E o programa não tá rodando porque não chega nem a compilar? Ou dá erro de execução?

paloma

O programa não tá compilando e quanto a informa o nome do livro que será excluído isso já está sendo feito no main, basta escolher a opção.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

typedef struct Biblioteca{
        char livros[51];
        int mat[51];
        struct Biblioteca *prox;
}TBiblioteca;

//VARIÁVEL GLOBAL
TBiblioteca *lista;
char livros[51];
int mat[51];

//FUNÇÃO LISTA VAZIA
TBiblioteca *lse_vazia()
{
   return NULL;
}           

//FUNÇÃO AUXILIAR
TBiblioteca *Reg_Livros(TBiblioteca *lista)
{
                    
    printf ("Entre com a matricula do livro: ");
    fflush (stdin);
    fgets(mat,51,stdin);
    printf ("Entre com o nome do livro: ");
    fflush(stdin);
    fgets (Livros,51,stdin);
} 
//FUNÇÃO REGISTRAR LIVROS
TBiblioteca *Incluir_Livros()
{
    TBiblioteca *ptr;
    Reg_Livros();
    
    ptr=(TBiblioteca*)calloc(1,sizeof(TBiblioteca));
    strcpy(ptr->livros,livros);
    ptr->prox=NULL;
    
    if (lista==NULL)
    {
      ptr = lista;
    }
    else
    {
        ptr->prox=lista;
        lista=ptr;
    }    
}

//FUNÇÃO LISTAR
TBiblioteca *Listar_Livros()
{
   TBiblioteca *aux;
   aux=lista;
   
   while(aux!=NULL)
   {
     printf ("Nome do Livro: %s",aux->livros);
   }
}     
            
//FUNÇÃO EXCLUIR LIVROS
TBiblioteca *Excluir_Livros()
{
    TBiblioteca *aux1;
    TBiblioteca *aux2;
    
     aux2 = NULL;
     aux1 = lista;

     while (aux1!=NULL &&(strcmp(aux1-> livros,livros)!=0)
     {
            aux2 = aux1;
            aux1 = aux1 -> prox;
     }
           
     if (aux2 == NULL)
     {
              lista = aux1 -> prox;
     }

     else
     {
         aux2 -> prox = aux1 -> prox;
     }

     free (aux1);

     printf ("O nome do livro foi excluido \n");
}
                 
//FUNÇÃO PRINCIPAL                    
int main ()
{
    char op;
    lista=lse_vazia();
    
    do{
        system ("cls");
        printf ("(I)ncluir\n");
        printf ("(L)istar\n");
        printf ("(E)xcluir\n");
        printf ("(S)air\n");
        printf ("\n");
        printf ("Digite a opcao: ");
        
        op = toupper (getche());
        
        switch(op)
        {
          case 'I': Incluir_Livros();
          break;
          
          case 'L': Listar_Livros();
          break;
          
          case 'E': Excluir_Livros();
          break;
          
          default: printf ("Opcao Invalida\n\n");
       }
       system ("PAUSE");
       
       }while(op!='S');
                  
    return (0);
}
David

Que erro de compilação aparece?

paloma

// cannot convert int*' tochar*’ for argument 1' tochar* fgets(char*, int, FILE*)’ (FUNÇÃO AUXILIAR)

fgets(mat,51,stdin);

//`Livros’ undeclared (first use this function) (FUNÇÃO AUXILIAR)

fgets (Livros,51,stdin);

//at this point in file (FUNÇÃO INCLUIR LIVROS)

Reg_Livros();
David

paloma:
// cannot convert int*' tochar*’ for argument 1' tochar* fgets(char*, int, FILE*)’ (FUNÇÃO AUXILIAR)
fgets recebe como parâmetros um ponteiro para char, um inteiro e um ponteiro para um FILE. o problema é que mat é um vetor de inteiros… Troque por um vetor de char.

paloma:
//`Livros’ undeclared (first use this function) (FUNÇÃO AUXILIAR)
Você colocou aqui Livros, com L maiúsculo, mas declarou com l minúsculo. Troque Livros por livros.

paloma:
//at this point in file (FUNÇÃO INCLUIR LIVROS)
A função Reg_Livros() recebe um parâmetro (TBiblioteca *lista) e você não está passando nenhum, por isso o erro.

Criado 21 de abril de 2006
Ultima resposta 22 de abr. de 2006
Respostas 7
Participantes 2