Oppure

Loading
26/08/11 10:15
el cuba libre
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
struct archivio_degenze
{
    char *nomi_degenti;
    int numero_giorni_degenza;
    struct archivio_degenze *successivo;
};
int contaelementi(archivio_degenze *first);
class reparti : public element
{
archivio_degenze *primo,*ultimo,*degente;
public:
    char *nome_reparto;
    int numero_posti,giorni_degenza_media;
    reparti(): primo(0),ultimo(0)
    {}
    ~reparti()
    {
        archivio_degenze *degente=primo;
        while (degente)
        {
            primo=degente->successivo;
            delete degente;
            degente=primo;
        }
    }
    void nuovo_degente()
    {
        archivio_degenze *degente= new archivio_degenze;
        cout<<"inserisci il nome del degente"<<endl;
        cin>>degente->nomi_degenti;
        cout<<"inserisci i gioni di degenza"<<endl;
        cin>>degente->numero_giorni_degenza;
        degente->successivo=0;
        if(primo)
        {
            ultimo->successivo=degente;
        }
        else
        {
            primo=degente;
        }
        ultimo=degente;
    }
    void printinfo ()
    {
        degente=primo;
//il programma si blocca proprio a questo cout.
        cout<<" nome degente : "<<degente->nomi_degenti<<endl;
        cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
        int numero_degenti=contaelementi(degente);
        cout<<"numero degenti : "<<numero_degenti<<endl;
        cout<<" nome degente : "<<degente->nomi_degenti<<endl;
        cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
        degente=primo;
        for(int i=0;i<numero_degenti;i++)
        {
            cout<<" nome degente : "<<degente->nomi_degenti<<endl;
            cout<<"giorni di degenza : "<<degente->numero_giorni_degenza<<endl;
        }
        int degenza_totale=0;
        degente=primo;
        for(int i=0;i<numero_degenti;i++)
        {
            degenza_totale=degenza_totale+degente->numero_giorni_degenza;
        }
        giorni_degenza_media=degenza_totale/numero_degenti;
        cout<<"giorni di degenza media del reparto : "<<giorni_degenza_media<<endl;
    }
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    reparti istanza[25];
    char *nome=new char[25];
    int x,altriospedali,i=0,j=0;
    do
    {
        altriospedali=0;
        cout<<"inserisci il nome dell'ospedale"<<endl;
        cin.getline(nome,25);
        istanza[j].impostanome(nome);
        do
        {
            x=0;
            istanza[i].nuovo_degente();
            cout<<"devi inserire altri degenti?si(1),no(0)"<<endl;
            cin>>x;
            i++;
            istanza[i].printinfo();
        }while(x==1);
        cout<<"devi inserire informazioni riguardanti altri ospedali?si(1),no(0)"<<endl;
        cin>>altriospedali;
        j++;
    }while(altriospedali==1);
    return a.exec();
}
int contaelementi(archivio_degenze *first)
{
    int i=0;
    archivio_degenze* n = first;
    while(n != NULL)
    {
        i++;
        n=n->successivo;
    }
    return (i);
}

qualcuno di voi mi può aiutare?
grazie mille
ciaociao:)
Ultima modifica effettuata da el cuba libre 26/08/11 20:44
aaa