Oppure

Loading
18/01/15 12:04
perillitommaso
Ho un problemino:
struct el_lista * eliminaplaylist(el_lista *PT){
       char nome[12];

       PlayList *app;



       do{
         system("cls");
         if(PT==NULL){
           printf("\nMP3 vuoto\n");
           return PT;
         }else{
           printf("\nPlayList presenti nell'MP3: ");
           curr = PT;
           while(curr!=NULL){
             printf("\n- %s",curr->nomeplaylist);
             curr=curr->next;
           }
          }
         do{
          printf("\nInserisci il nome della PlayList da eliminare: ");
          scanf("%s",nome);
          maiuscolo(nome);
          //controlliamo se la playlist da eliminare è il primo nodo
          if(strcmp(PT->nomeplaylist,nome)==0){
           app=PT;
           PT=PT->next;
           free(app);//liberazione dalla memoria del nodo/ cancellazione nodo
           flag=1;
          }else{
            //non è il primo nodo quindi controllare al centro della lista
            curr = PT;
            while(curr->next!=NULL && flag == 0){
              if(strcmp(curr->next->nomeplaylist,nome)==0){
                if(curr->next==NULL){
                    free(curr->next);
                    flag=1;
                }else{
                app=curr->next;
                curr->next=curr->next->next;
                free(app);
                flag=1;
                }
             }else{
                curr=curr->next;
             }
            }
          }
          if(flag==0){
           printf("\nErrore,non esiste la PlayList %s\n",nome);
           system("PAUSE");
          }
         }while(flag==0);

       printf("\nEliminazione PlayList %s avvenuta con successo.",nome);

       printf("\nVuoi cancellare un' altra PlayList? <si/no>");
       scanf("%s",scelta);
       //controllo sulla scela dell'utente
       while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
          printf("\nErrore, inserisci solo si o no : ");
          scanf("%s",scelta);
       }
      }while(strcmp(scelta,"si")==0);//cicla di nuovo se la scelta è si

       return PT;
}

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?
aaa
18/01/15 13:33
perillitommaso
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:
curr = PT;
            while(curr->next!=NULL && flag == 0){
              if(strcmp(curr->next->nomeplaylist,nome)==0){
                app=curr->next;
                curr->next=curr->next->next;
                free(app);
                flag=1;
             }else{
                curr=curr->next;
             }
            }
aaa
19/01/15 16:50
perillitommaso
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
aaa