Funzione delete_to_list.

di il
11 risposte

Funzione delete_to_list.

Buongiorno sono alle prese con questa funzione che cancella il record trovato nella lista , ora noto un problema, cancella il record solo se io inserisco il titolo quindi il primo campo della struttura), mi chiedevo in che modo fosse possibile, senza aggiungere un altra identica funzione eliminare il record inserendo l'author.
    
bib_p delete_record(bib_p head, char key[])
{
    bib*temp, *prev, *t;
    int found =0;
    if(head==NULL)
        return head;
    
    
    if(strcmp(head->title,key)==0)
    {
        temp=head;
        head=head->next;
        free(temp);
        return(head);
    }
    
    temp=head->next;
    prev= head;
    
    while(temp!= NULL && found ==0)
    {
        if( strcmp(temp->title,key)==0)
        {
            found =1;
        }
        else
        {
            prev= temp;
            temp=temp->next;
        }
    }
    
    if(found!=0)
    {
        //il record è presente
        prev->next = temp->next;
        free(temp);
        
    }
    
    return head;
    

11 Risposte

  • Re: Funzione delete_to_list.

    Controlla le linee in cui c'è un riferimento al titolo, ad esempio

    if(strcmp(head->title,key)==0)

    if( strcmp(temp->title,key)==0)

    e chiediti perché c'è title
  • Re: Funzione delete_to_list.

    Title perche si elimina quando inserisco il titolo dell'opera , ma io mi chiedevo se CONTEMPORANEAMENTE è possibile avere una struttura che qual che sia il campo inserito elimini il record.
  • Re: Funzione delete_to_list.

    Fai un esempio pratico di come dovresti chiamare la funzione dal main e ti accorgi che quello che chiedi non è chiaro ... (che vuol dire "contemporaneamente"?)
  • Re: Funzione delete_to_list.

    Per esempio ho la seguente struttura:

    struct lib{
    char titolo[DIM];
    char autore[DIM];
    char anno_publicazione[DIM];

    struct lib *next;}

    typedef struct lib *lib_P;

    Nel caso in cui io volessi richiamare la mia funzione delete_to_list all'interno del main e far si che il record venga eliminato anche se io digito l'autore e non il titolo , devo necessariamente definire una seconda funzione delete_to record oppure posso modificare quella sopra?
  • Re: Funzione delete_to_list.

    Ripeto ... se vuoi usare l'autore e non il titolo e vuoi usare quella stessa funzione, le linee che confrontano il titolo devono essere sostituite da quelle che confrontano l'autore.

    Quindi, se vuoi usare la stessa funzione devi aggiungere un altro parametro che indichi cosa rappresenta la key che hai introdotto e, in base a quel parametro, dentro la funzione decidere quale campo della struttura confrontare.
  • Re: Funzione delete_to_list.

    Non penso di aver capito oregon.. :/
  • Re: Funzione delete_to_list.

    Ho pensato tipo di fare una cosa del genere :

    if(strcmp(head->title,key)==0||strcmp(head->author,key)==0), ma non va bene , non mi dice nemmeno errore , solo che non elimina.
  • Re: Funzione delete_to_list.

    C'è un'altra linea dove c'è il confronto ... te l'ho pure scritto !
  • Re: Funzione delete_to_list.

    Si si anhe l'altra linea ho modificato nel modo analogo. Dovrebbe funzionare con queste 2 modifiche?
  • Re: Funzione delete_to_list.

    Sì dovrebbe andare.
  • Re: Funzione delete_to_list.

    Si adesso va , non capisco perche prima non andava....
Devi accedere o registrarti per scrivere nel forum
11 risposte