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++ - problema con primo elemento della lista,sembra sempre impostato su NULL!
Forum - C/C++ - problema con primo elemento della lista,sembra sempre impostato su NULL!

Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 12:15
Venerdì, 26/08/2011
ciao
ho un problema con questo codice. ho creato una lista e via via devo inserire dei nuovi elementi, nel metodo nuovo_degente sembra tutto funzionare solo che al suo esterno per esempio in printinfo pare che venga distrutta la lista cioè che il pirmo elemento sia NULL e quindi si blocca l'esecuzione del programma. mi sto riguardanto le regole di visibilità delle variabili e ho confermato un dubbio che avevo anche prima, non è che quando esco dalla classe il distruttore distrugge tutto quello che ho inserito? posto il codice per intero, o quasi!XD
Codice sorgente - presumibilmente C++

  1. struct archivio_degenze
  2. {
  3.     char *nomi_degenti;
  4.     int numero_giorni_degenza;
  5.     struct archivio_degenze *successivo;
  6. };
  7. int contaelementi(archivio_degenze *first);
  8. class reparti : public element
  9. {
  10. archivio_degenze *primo,*ultimo,*degente;
  11. public:
  12.     char *nome_reparto;
  13.     int numero_posti,giorni_degenza_media;
  14.     reparti(): primo(0),ultimo(0)
  15.     {}
  16.     ~reparti()
  17.     {
  18.         archivio_degenze *degente=primo;
  19.         while (degente)
  20.         {
  21.             primo=degente->successivo;
  22.             delete degente;
  23.             degente=primo;
  24.         }
  25.     }
  26.     void nuovo_degente()
  27.     {
  28.         archivio_degenze *degente= new archivio_degenze;
  29.         cout<<"inserisci il nome del degente"<<endl;
  30.         cin>>degente->nomi_degenti;
  31.         cout<<"inserisci i gioni di degenza"<<endl;
  32.         cin>>degente->numero_giorni_degenza;
  33.         degente->successivo=0;
  34.         if(primo)
  35.         {
  36.             ultimo->successivo=degente;
  37.         }
  38.         else
  39.         {
  40.             primo=degente;
  41.         }
  42.         ultimo=degente;
  43.     }
  44.     void printinfo ()
  45.     {
  46.         degente=primo;
  47. //il programma si blocca proprio a questo cout.
  48.         cout<<" nome degente : "<<degente->nomi_degenti<<endl;
  49.         cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
  50.         int numero_degenti=contaelementi(degente);
  51.         cout<<"numero degenti : "<<numero_degenti<<endl;
  52.         cout<<" nome degente : "<<degente->nomi_degenti<<endl;
  53.         cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
  54.         degente=primo;
  55.         for(int i=0;i<numero_degenti;i++)
  56.         {
  57.             cout<<" nome degente : "<<degente->nomi_degenti<<endl;
  58.             cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
  59.         }
  60.         int degenza_totale=0;
  61.         degente=primo;
  62.         for(int i=0;i<numero_degenti;i++)
  63.         {
  64.             degenza_totale=degenza_totale+degente->numero_giorni_degenza;
  65.         }
  66.         giorni_degenza_media=degenza_totale/numero_degenti;
  67.         cout<<"giorni di degenza media del reparto : "<<giorni_degenza_media<<endl;
  68.     }
  69. };
  70. int main(int argc, char *argv[])
  71. {
  72.     QCoreApplication a(argc, argv);
  73.     reparti istanza[25];
  74.     char *nome=new char[25];
  75.     int x,altriospedali,i=0,j=0;
  76.     do
  77.     {
  78.         altriospedali=0;
  79.         cout<<"inserisci il nome dell'ospedale"<<endl;
  80.         cin.getline(nome,25);
  81.         istanza[j].impostanome(nome);
  82.         do
  83.         {
  84.             x=0;
  85.             istanza[i].nuovo_degente();
  86.             cout<<"devi inserire altri degenti?si(1),no(0)"<<endl;
  87.             cin>>x;
  88.             i++;
  89.             istanza[i].printinfo();
  90.         }while(x==1);
  91.         cout<<"devi inserire informazioni riguardanti altri ospedali?si(1),no(0)"<<endl;
  92.         cin>>altriospedali;
  93.         j++;
  94.     }while(altriospedali==1);
  95.     return a.exec();
  96. }
  97. int contaelementi(archivio_degenze *first)
  98. {
  99.     int i=0;
  100.     archivio_degenze* n = first;
  101.     while(n != NULL)
  102.     {
  103.         i++;
  104.         n=n->successivo;
  105.     }
  106.     return (i);
  107. }


qualcuno di voi mi può aiutare?
grazie mille
ciaociao:)

Ultima modifica effettuata da el cuba libre il 26/08/2011 alle 22:44
PM