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