Ragazzi il codice che ho postato non mi dà nessun errore, la function aggiungi, sembra funzionare ma nel momento in cui rientro nell'applicazione e clicco 2 per stampare lo statino degli studenti, il programma smette di funzionare, e inizialmente mi stampa vicino agli appositi cout dei caratteri strani. Mentre una volta inserito uno studente cerco di stampare lo statino tramite matricola(case 3non stampa a video nulla, mi chiede solo se ritornare all'applicazione.
Come mai? Forse il tipo di dati String non è dichiarato correttamente?
C'è un problema nella dichiarazione dinamica della struttura?
Grazie anticipatamente,
gaten
codice:#include<iostream> using namespace std; typedef char String[30]; typedef struct { int giorno; int mese; int anno; } Data; typedef struct { String materia; int codice; int voto; Data data_esame; } Esame; typedef struct { String matricola; String nome; String cognome; Esame *vettEsamiSuperati; unsigned int numeroEsamiSuperati; unsigned int esamiSostenuti; } Studente; Studente aggiungi(Studente *vettStudenti, int &num_stud); void statino(Studente *vettStudenti, int num_stud); void statino_m(Studente *vett,String matr,int num); int main() { int scelta; int num_stud=0; char continua, yes; String mat; Studente *vettStudenti; do{ cout<<"*****************************************************"<<endl; cout<<"**************** CARRIERA ACCADEMICA ****************"<<endl; cout<<"_1) Aggiungi uno studente____________________________"<<endl; cout<<"_2) Stampa statino di tutti gli studenti_____________"<<endl; cout<<"_3) Stampa lo statino di uno studente(data la matr.)_"<<endl; cout<<"_____________________________________________________"<<endl; cin>>scelta; switch (scelta){ case 1: // aggiungi uno studente; do{ cout<<"INSERIMENTO STUDENTE NUMERO "<<num_stud+1<<endl; aggiungi(vettStudenti, num_stud); cout<<"Vuoi inserire un altro studente?"<<endl; cin>>continua; } while (continua == 's' || continua == 'S'); break; case 2: // stampa lo statino di tutti gli studenti statino(vettStudenti, num_stud); break; case 3: // stampa lo statino di uno studente data la matricola if(num_stud > 0){ cout << "Inserire matricola"<<endl; cin>>mat; statino_m(vettStudenti,mat, num_stud); }else{ cout<<"Non è presente nessuno studente!"<<endl; } break; } cout<<"Continuare ad usare l'applicazione"<<endl; cin>>yes; } while (yes=='s' || yes=='S'); } /* function per aggiungere gli studenti */ Studente aggiungi(Studente *vettStudenti, int &num_stud){ int N_ESAMI; int superati; vettStudenti=new Studente [num_stud]; cout<<"INFO PERSONALI STUDENTE"<<endl; cout<<"Inserisci il nome dello studente:"<<endl; cin>>vettStudenti[num_stud].nome; cout<<"Inserisci il cognome dello studente:"<<endl; cin>>vettStudenti[num_stud].cognome; cout<<"Inserisci la matricola dello studente:"<<endl; cin>>vettStudenti[num_stud].matricola; cout<<endl<<"INFO ESAMI:"<<endl; cout<<"Quanti esami ha sostenuto lo studente?"<<endl; cin>>N_ESAMI; vettStudenti[num_stud].vettEsamiSuperati=new Esame [N_ESAMI]; vettStudenti[num_stud].esamiSostenuti=N_ESAMI; for(int i=0; i<N_ESAMI; i++){ cout<<"ESAME NUMERO "<<i+1<<endl; cout<<"Inserisci la materia dell'esame:"<<endl; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].materia; cout<<"Inserisci il codice dell'esame:"<<endl; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].codice; cout<<"Inserisci il voto dell'esame:"<<endl; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].voto; if (vettStudenti[num_stud].vettEsamiSuperati[i].voto >= 18 || vettStudenti[num_stud].vettEsamiSuperati[i].voto <= 30){ superati++; } cout<<"Inserisci la data dell'esame:"<<endl; cout<<"Giorno:\t"; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].data_esame.giorno; cout<<endl<<"Mese:\t"; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].data_esame.mese; cout<<endl<<"Anno:\t"; cin>>vettStudenti[num_stud].vettEsamiSuperati[i].data_esame.anno; } vettStudenti[num_stud].numeroEsamiSuperati=superati; num_stud++; } /* function per stampare a video tutti gli studenti e il relativo statino */ void statino(Studente *vettStudenti, int num_stud){ if(num_stud > 0){ for (int i=0; i<num_stud; i++){ cout<<"STUDENTE NUMERO "<<i+1<<" CON MATRICOLA "<<vettStudenti[i].matricola<<endl; cout<<"Nome studente:\t"<<vettStudenti[i].nome<<endl; cout<<"Cognome studente:\t"<<vettStudenti[i].cognome<<endl; cout<<endl<<"ESAMI SUPERATI:"<<endl; cout<<"_______________________________________________________________________________"<<endl; for (int h=0; h<vettStudenti[i].esamiSostenuti; h++){ if (vettStudenti[i].vettEsamiSuperati[i].voto > 18){ cout<<"Nome materia:\t"<<vettStudenti[i].vettEsamiSuperati[h].materia<< "\t|"<<endl; cout<<"Codice esame:\t"<<vettStudenti[i].vettEsamiSuperati[h].codice<< "\t|"<<endl; cout<<"Voto esame:\t"<<vettStudenti[i].vettEsamiSuperati[h].materia<< "\t|"<<endl; cout<<"Data esame:\t"<<vettStudenti[i].vettEsamiSuperati[h].data_esame.giorno<<"-"; cout<<vettStudenti[i].vettEsamiSuperati[h].data_esame.mese<<"-"; cout<<vettStudenti[i].vettEsamiSuperati[h].data_esame.anno<<"\t|"; } } cout<<"_______________________________________________________________________________"<<endl; } } else { cout<<"Non è presente nessuno studente!"<<endl; } } /* function per stampare a video lo statino di un singolo studente (data in input la matricola) */ void statino_m(Studente *vettStudenti, String matr, int num_stud){ int i,j; i=0; do{ if (vettStudenti[i].matricola == matr){ cout<<"STUDENTE: "<<i<<endl; cout<<"Nome: "<<vettStudenti[i].nome<<endl; cout<<"Cognome: "<<vettStudenti[i].cognome<<endl; cout<<"Matricola: "<<vettStudenti[i].matricola<<endl; cout<<"Esami superati: "<<vettStudenti[i].numeroEsamiSuperati<<endl; for (int h=0; h<vettStudenti[num_stud].esamiSostenuti; h++){ if (vettStudenti[num_stud].vettEsamiSuperati[i].voto > 18){ cout<<"Nome materia:\t"<<vettStudenti[num_stud].vettEsamiSuperati[h].materia<< "\t|"<<endl; cout<<"Codice esame:\t"<<vettStudenti[num_stud].vettEsamiSuperati[h].codice<< "\t|"<<endl; cout<<"Voto esame:\t"<<vettStudenti[num_stud].vettEsamiSuperati[h].materia<< "\t|"<<endl; cout<<"Data esame:\t"<<vettStudenti[num_stud].vettEsamiSuperati[h].data_esame.giorno<<"-"; cout<<vettStudenti[num_stud].vettEsamiSuperati[h].data_esame.mese<<"-"; cout<<vettStudenti[num_stud].vettEsamiSuperati[h].data_esame.anno<<"\t|"; } } } i++; } while (vettStudenti[i].matricola != matr && i<num_stud); }

non stampa a video nulla, mi chiede solo se ritornare all'applicazione.
Rispondi quotando