Liste in c

di il
60 risposte

Liste in c

Buonasera devo eliminare un libro dalla lista ed ho fatto cosi

List cancellalibri(List lis, char titolo[MAXTITOLO)
{
if(!lis) return NULL;
  if(Strcmp(lis—>titolo, titolo)==0)
List tmp = lis->next;
freeLista(lis);
return tmp;
}
lis->next = cancellalibri(lis->next, titolo);
return lis;
}
ma il libro non viene eliminato..sapete risolvermi questo problema??

60 Risposte

  • Re: Liste in c

    Continui ad aprire thread uguali e con errori sempre uguali ... ti avrò detto mille volte che

    char titolo

    è sbagliato perché titolo è una stringa e tu stessa hai corretto in altri mille thread con

    char titolo[30]

    e sai che le stringhe si confrontano con strcmp e non con ==

    Ma non possiamo diventare matti dietro ai tuoi thread. E mi taccio per sempre.
  • Re: Liste in c

    oregon ha scritto:


    Continui ad aprire thread uguali e con errori sempre uguali ... ti avrò detto mille volte che

    char titolo

    è sbagliato perché titolo è una stringa e tu stessa hai corretto in altri mille thread con

    char titolo[30]

    e sai che le stringhe si confrontano con strcmp e non con ==

    Ma non possiamo diventare matti dietro ai tuoi thread. E mi taccio per sempre.
    Si lo so ho modificato non ho visto che avevo caricato il codice di prova
  • Re: Liste in c

    Le graffe dopo l'if
    
    if(Strcmp(lis—>titolo, titolo)==0)
    {
    List tmp = lis->next;
    freeLista(lis);
    return tmp;
    }
    
    Ma se vuoi essere sicura di eliminare anche eventuali duplicati, prova a fare così :
    
    List cancellalibri(List lis, char titolo[MAXTITOLO])
    {
    if(!lis) return NULL;
      if(Strcmp(lis—>titolo, titolo)==0)
      {
    	List tmp = lis->next;
    	freeLista(lis);
    	lis = tmp;
       }
    lis->next = cancellalibri(lis->next, titolo);
    return lis;
    }
    
    PS: per favore, specifica anche se compila o no, perché per esempio quello che hai postato non dovrebbe compilare (una parentesi aperta e due chiuse).
  • Re: Liste in c

    In cui

    freeLista(lis);

    è ovviamente sbagliato
  • Re: Liste in c

    Alexv ha scritto:


    Le graffe dopo l'if
    
    if(Strcmp(lis—>titolo, titolo)==0)
    {
    List tmp = lis->next;
    freeLista(lis);
    return tmp;
    }
    
    Ma se vuoi essere sicura di eliminare anche eventuali duplicati, prova a fare così :
    
    List cancellalibri(List lis, char titolo[MAXTITOLO])
    {
    if(!lis) return NULL;
      if(Strcmp(lis—>titolo, titolo)==0)
      {
    	List tmp = lis->next;
    	freeLista(lis);
    	lis = tmp;
       }
    lis->next = cancellalibri(lis->next, titolo);
    return lis;
    }
    
    PS: per favore, specifica anche se compila o no, perché per esempio quello che hai postato non dovrebbe compilare (una parentesi aperta e due chiuse).
    non mi funziona o meglio elimina tutti i titoli del libro io ho una lista del genere
    Bambi Disney 34554
    Cenerentola Disney 57777
    Ratatouille Disney 85345
    Pinocchio Disney 60543
    Bumbo Disney 14532
    Iliade Omero 10543
    TrainSpotting Welsh 35435
    Odissea Bryne 40435
    Cuore Marchesi 12534
    Malavoglia Valeria 45433
    Siddharta Still 245567
    Lolita Wilcox 12534
    Amleto Shakespeare 35453
    Ulisse Joyce 15348
    Possession Esposito 55435

    e voglio eliminare tipo: iliade opere 10543
  • Re: Liste in c

    Non hai letto quello che ho appena scritto ... ovviamente
  • Re: Liste in c

    oregon ha scritto:


    Non hai letto quello che ho appena scritto ... ovviamente
    si la funzione freeList non va ma io la funzione l'ho fatta cosi:
    
    
    void freeLista(struct libri *lista)
    {
      if (lista != NULL) {
        freeLista(lista->next);
        freeNodo(lista);
      }
    }
    
    
    
  • Re: Liste in c

    È proprio SBAGLIATO usare quella funzione.
    Devi cancellando un nodo non tutta la lista! E dai!
  • Re: Liste in c

    saraciao ha scritto:


    oregon ha scritto:


    Non hai letto quello che ho appena scritto ... ovviamente
    si la funzione freeList non va ma io la funzione l'ho fatta cosi:
    
    
    void freeLista(struct libri *lista)
    {
      if (lista != NULL) {
        freeLista(lista->next);
        freeNodo(lista);
      }
    }
    
    
    
    e se uso un freeNodo?
    
    void freeNodo(struct libri *nodo)
    {
       free((void *) nodo);
    }
    
    
    
  • Re: Liste in c

    Ma devi proprio chiederlo?
  • Re: Liste in c

    oregon ha scritto:


    Ma devi proprio chiederlo?
    con freeNodo funziona...vorrei chiederti un'ultima io ho due file uno che contiene i libri e un 'altro vuoto dove inserisco le richieste ora vorrei che il titolo presente in una richiesta viene cercato nella lista dei libri e poi eliminato... le funzioni di cerca e eliminazione le ho ed funzionano ma come posso fare questa sorte di collegamento tra file richiesta e file libri?
  • Re: Liste in c

    Ma i libri non sono caricati nella lista in memoria?
  • Re: Liste in c

    oregon ha scritto:


    Ma i libri non sono caricati nella lista in memoria?
    si...c'è li ho sul file e li ho passati alla lista..ma la funzione di cancellazione non funziona nel caso l'elemento da cancellare e in testa o coda come posso risolvere?
  • Re: Liste in c

    Quindi devi cercarli ed eliminarli nella lista e dopo scrivi tutta la lista nel file. Cosi saranno eliminati anche dal file
    Comunque la funzione elimina anche in testa e in coda a patto che la lista sia formata correttamente. Ma non so come leggi il file e inserisci i libri in lista
Devi accedere o registrarti per scrivere nel forum
60 risposte