Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15

    [C++] Progetto: lettore musicale (con codice)

    Ciao a tutti di nuovo, avevo già aperto una discussione del genere ma senza codice. Mi è stata chiusa così ne inizio una nuova.
    Il mio progetto consiste nel gestire file musicali. Ho pensato così di creare una lista con strutture e puntatori... purtroppo nel web non trovo molto... perciò avrei bisogno di voi...
    Vi posto il codice che funge fino ad Aggiungi (aggiunge un elemento) ma quando chiedo di visualizzare la lista si blocca.
    Avviso che per il momento per il titolo e l'artista ho usato le stringhe ma che lo perfezionerò con char e [] appena tutte le funzioni sono ok; ma nel complesso il codice tutto è ancora da perfezionare...per ora mi interessa che almeno ci sia un buon scheletro.
    Questo è il codice

    codice:
    #include <iostream>
    #include <string>
    using namespace std;
    
    struct brano
    {
    string titolo;
    string artista;
    string genere;
    struct brano *next;
    };
    
    brano* testa;
    int attuali = 0;
    
    //Prototipi di funzioni
    void  Titolo();
    void  Menu();
    void  Aggiungi (brano* & );
    void  Visualizza (brano*);
    void  Ordina();
    void  Trova ();
    void  Elimina ();
    
    
    //funzione principale
    int main()
    {
    
    int risp;	
    
    brano* testa = NULL;
    
    
    Titolo ();
    
    do {
    Menu ();
    cout <<"\n\nDigita la tua scelta: ";
    cin >> risp;
    } while (risp <1 || risp > 6);
    switch (risp)
    {
    case 1:
         Aggiungi(testa);
         break;
    case 2:
         Visualizza(testa);
    	 break;
    case 3:
         Ordina;
    	 break;
    case 4:
         Trova;
    	 break;
    case 5:
         Elimina;
    	 break;
    case 6:
    cout <<"\nArrivederci! :) \n\n";
    	 break;
    }
    
    return 0;
    }
    
    // funzioni in dettaglio
    
    void Titolo ()
    {
    cout <<"\n\t LettoreMusicale.cpp      \n";
    cout <<"\n\t Esame di: ALGORITMI E PROGRAMMAZIONE \n";
    cout <<"\n\t                == GESTIONE DI FILE MUSICALI ==                 \n";
    cout <<"\n\t Contatti attualmente presenti: " << attuali << endl; 
    } // fine Titolo
    
    void Menu()
    {
    cout <<"\n\n\t            == Menu'==           \n";
    cout <<"\n\t [1]: Aggiungi un nuovo brano      \n";
    cout <<"\n\t [2]: Visualizza i brani inseriti  \n";
    cout <<"\n\t [1]: Ordina brani                 \n";
    cout <<"\n\t [4]: Trova un brano               \n";
    cout <<"\n\t [5]: Elimina brano                \n";
    cout <<"\n\t [6]: Esci\n";
    } // fine Menu
    
    void Aggiungi (brano* &testa)
    {
    int risposta;	
    string TitoloBrano;
    string ArtistaBrano;
    string GenereBrano;
    
    brano* nuovo;
    nuovo = new brano;
    
    cout <<"\n\n == Nuovo elemento == \n";
    cout <<"\nTitolo brano:   \t";
    cin >> TitoloBrano;
    cout <<"\nArtista:        \t";
    cin >> ArtistaBrano;
    cout <<"\nGenere:         \t";
    cin >> GenereBrano;
    
    nuovo->titolo = TitoloBrano;
    nuovo->artista = ArtistaBrano;
    nuovo->genere = GenereBrano;
    nuovo->next = testa;
    testa = nuovo;
    attuali ++;
    cout <<"\n == Brano Inserito! == \n";
    cout <<"\nVuoi effettuare una nuova operazione? Si= 1; No = 0 \n\n";
    cin >> risposta;
    if (risposta == 1) main();
    } // fine Aggiungi
    
    void Visualizza (brano* testa)
    {
    brano* prossimo;	
    prossimo = testa;
    
      cout <<"\n\n        == ELENCO BRANI == \n\n";
      
    do { 	
      cout <<"\n\n\tTitolo:  " << prossimo->titolo  << " \n";
      cout <<"\n\n\tArtista: " << prossimo->artista << " \n";
      cout <<"\n\n\tGenere:  " << prossimo->genere  << " \n";
      prossimo = prossimo->next;
    } while (prossimo != NULL);
    } // fine Visualizza

  2. #2
    codice:
    cout <<"\nVuoi effettuare una nuova operazione? Si= 1; No = 0 \n\n";
    cin >> risposta;
    if (risposta == 1) main();
    Perchè fai questa cosa? Quando la funzione Aggiungi termina ritorna comunque al main. Se vuoi che continui a mostrare il menu per altre operazioni devi modificare la condizione del while, aggiungendo che deve essere diverso da 6 (uscita dal programma).
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Ok...ho seguito il tuo suggerimento...thanks... ora è più lineare
    che mi potresti suggerire per la funzione Visualizza?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Ottimo!!! Con questa modifica funge anche la funzione Visualizza()....
    THX!!!

  5. #5
    Non capisco cosa intendi per "suggerimenti", comunque c'è un piccolo errore: nella funzione Visualizza non controlli se la testa della lista è NULL, all'inizio. In tal modo rischi di dereferenziare un puntatore NULL nel corpo del do ... while, ottenendo un bel segmentation fault.
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Hai ragione....aggiungo subito!!!

  7. #7
    Originariamente inviato da luna88
    Ottimo!!! Con questa modifica funge anche la funzione Visualizza()....
    THX!!!
    Si, perchè il problema era dato dal fatto che dopo l'Aggiungi chiamavi il main, che impostava a NULL la testa della lista. La funzione Visualizza quindi riceveva un puntatore a NULL e cercava di chiamarne i valori, mandando in crash il programma.
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    Strano...ma non capisco perchè
    Con questa funzione trova se inserisco un solo dato me lo trova. OK
    Se ne inserisco due: se voglio trovare proprio il secondo che ho inserito me lo trova, se invece voglio trovare il primo no... perché??? uff...

    codice:
    void Trova (brano *testa)
    {
    string ArtistaBrano;
    bool trovato = false;
    	
    if (!testa)
    {cout <<" \n\n LISTA VUOTA!!!  \n";
    return;}
    
    else
    {
    cout <<"\n == RICERCA PER ARTISTA == \n"; 	
    cout <<"\n\nArtista: \t";
    cin >> ArtistaBrano;
    
    brano* scorri;
    scorri = testa;
    
    do {
    if (scorri->artista == ArtistaBrano)
    {
    trovato = true;		
    cout <<"\n\n == RISULTATO DELLA RICERCA == \n" << endl;
    cout <<" _________________________________ \n" << endl;
    cout <<"\nArtista: " << scorri->artista << " \n";
    cout <<"\nTitolo:  " << scorri->titolo << "  \n";
    cout <<"\nGenere:  " << scorri->genere << " \n\n";
    } // fine if
    else 		
    {
    trovato = false;	
    scorri = scorri->next;}
    } while(scorri == NULL);
    system ("pause");
    system ("cls");
    
    } // fine Else		
    }// fine Trova

  9. #9
    Due cose:
    1) Evita l'else nel controllo sulla testa della lista, tanto se è vuota la funzione ritorna, per cui ti basta solo l'if, senza l'else.
    2) Togli assolutamente quel
    codice:
    while(scorri == NULL);
    , è lì il problema.
    Il tuo programma inserisce i nuovi dati in testa alla lista, per cui se tu cerchi l'ultimo elemento che hai inserito (ovvero quello in testa), allora viene trovato, in tutti gli altri casi così non sarà, perchè la condizione del while è sbagliata.
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    15
    GRAZIEEE!!! MR BEAN... sei il numero 1!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.