Funzione delete_to_list.

di Anonimizzato13124 il
11 risposte
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

  • 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
  • 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.
  • 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"?)
  • 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?
  • 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.
  • Non penso di aver capito oregon.. :/
  • 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.
  • C'è un'altra linea dove c'è il confronto ... te l'ho pure scritto !
  • Si si anhe l'altra linea ho modificato nel modo analogo. Dovrebbe funzionare con queste 2 modifiche?
  • Sì dovrebbe andare.
  • Si adesso va , non capisco perche prima non andava....
Devi accedere o registrarti per scrivere nel forum
11 risposte