Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - errore cancellazione del nodo della lista linkata
Forum - C/C++ - errore cancellazione del nodo della lista linkata

Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 13:04
Domenica, 18/01/2015
Ho un problemino:
Codice sorgente - presumibilmente C/C++

  1. struct el_lista * eliminaplaylist(el_lista *PT){
  2.        char nome[12];
  3.  
  4.        PlayList *app;
  5.  
  6.  
  7.  
  8.        do{
  9.          system("cls");
  10.          if(PT==NULL){
  11.            printf("\nMP3 vuoto\n");
  12.            return PT;
  13.          }else{
  14.            printf("\nPlayList presenti nell'MP3: ");
  15.            curr = PT;
  16.            while(curr!=NULL){
  17.              printf("\n- %s",curr->nomeplaylist);
  18.              curr=curr->next;
  19.            }
  20.           }
  21.          do{
  22.           printf("\nInserisci il nome della PlayList da eliminare: ");
  23.           scanf("%s",nome);
  24.           maiuscolo(nome);
  25.           //controlliamo se la playlist da eliminare è il primo nodo
  26.           if(strcmp(PT->nomeplaylist,nome)==0){
  27.            app=PT;
  28.            PT=PT->next;
  29.            free(app);//liberazione dalla memoria del nodo/ cancellazione nodo
  30.            flag=1;
  31.           }else{
  32.             //non è il primo nodo quindi controllare al centro della lista
  33.             curr = PT;
  34.             while(curr->next!=NULL && flag == 0){
  35.               if(strcmp(curr->next->nomeplaylist,nome)==0){
  36.                 if(curr->next==NULL){
  37.                     free(curr->next);
  38.                     flag=1;
  39.                 }else{
  40.                 app=curr->next;
  41.                 curr->next=curr->next->next;
  42.                 free(app);
  43.                 flag=1;
  44.                 }
  45.              }else{
  46.                 curr=curr->next;
  47.              }
  48.             }
  49.           }
  50.           if(flag==0){
  51.            printf("\nErrore,non esiste la PlayList %s\n",nome);
  52.            system("PAUSE");
  53.           }
  54.          }while(flag==0);
  55.  
  56.        printf("\nEliminazione PlayList %s avvenuta con successo.",nome);
  57.  
  58.        printf("\nVuoi cancellare un' altra PlayList? <si/no>");
  59.        scanf("%s",scelta);
  60.        //controllo sulla scela dell'utente
  61.        while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
  62.           printf("\nErrore, inserisci solo si o no : ");
  63.           scanf("%s",scelta);
  64.        }
  65.       }while(strcmp(scelta,"si")==0);//cicla di nuovo se la scelta è si
  66.  
  67.        return PT;
  68. }


in poche parole, ho provato a fare vari test e ho visto che con due playlist mi fa l'eliminazione in coda e in testa mentre con 3 playlist non succede praticamente nulla. Mi dice che me li cancella ma quando vado a visualizzare di nuovo le playlist presenti, vedo di nuovo le playlist di prima... qualcuno può aiutarmi?

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 14:33
Domenica, 18/01/2015
aggiungo: la prima volta funziona, mi effettua la cancellazione mentre la seconda volta no... non so perchè :hail::hail:
inoltre ho modificato un pezzo di codice:
Codice sorgente - presumibilmente Plain Text

  1. curr = PT;
  2.             while(curr->next!=NULL && flag == 0){
  3.               if(strcmp(curr->next->nomeplaylist,nome)==0){
  4.                 app=curr->next;
  5.                 curr->next=curr->next->next;
  6.                 free(app);
  7.                 flag=1;
  8.              }else{
  9.                 curr=curr->next;
  10.              }
  11.             }


PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:50
Lunedì, 19/01/2015
Ho risolto il problema, l'errore non c'era nell'algoritmo di cancellazione del nodo ma bensì dovevo solo inizializzare la flag a 0 perchè essendo una variabile globale, una volta valeva 0, dopo aver eliminato i nodi valeva 1 e rimaneva con il valore di 1

PM Quote