PDA

Visualizza la versione completa : [C++] Problemino inserimento di pių studenti: ne fa una sola


Gybra
22-05-2009, 16:25
ho scritto questo codice sorgente c++ funziona ma solo che l acquisizione di piu alunni non la fa ne fa solamente una come posso risolvere? grazie:

#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

typedef char Tstring20[21];
typedef char Tstring25[26];
typedef char Tstring15[16];
typedef float tvettfloat[4];
typedef char vuoto[1];

struct Talunno{
Tstring20 nome;
Tstring25 cognome;
Tstring15 classe;
float scritto1quad;
float orale1quad;
float pratico1quad;
float scritto2quad;
float orale2quad;
float pratico2quad;
};

typedef Talunno Tregistro[33];

void acquisiscialunni(Tregistro &alunni, int &N){
int I;
vuoto a;
do{
cout<<"Inserisci quanti alunni acquisire: ";
cin>>N;
cin.getline(a,1);
}while((N<1)||(N>32));
for(I=0;I<N;I++){
cout<<endl;
cout<<I+1<<char(248)<<" alunno "<<endl;
cout<<endl;
cout<<"Nome: ";
cin.getline(alunni[I].nome,20);
cout<<"Cognome: ";
cin.getline(alunni[I].cognome,25);
cout<<"Classe: ";
cin.getline(alunni[I].classe,15);

cout<<endl;
cout<<"Scritto 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Scritto: ";
cin>>alunni[I].scritto1quad;
}

cout<<endl;
cout<<"Orale 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Orale: ";
cin>>alunni[I].orale1quad;
}

cout<<endl;
cout<<"Pratico 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Pratico: ";
cin>>alunni[I].pratico1quad;
}

cout<<endl;
cout<<"Scritto 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Scritto: ";
cin>>alunni[I].scritto2quad;
}

cout<<endl;
cout<<"Orale 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Orale: ";
cin>>alunni[I].orale2quad;
}

cout<<endl;
cout<<"Pratico 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Pratico: ";
cin>>alunni[I].pratico2quad;
}

}
}

void visualizzaalunni(Tregistro alunni, int N){
int I;
cout<<endl;
cout<<"----------------Riepilogo----------------"<<endl;
cout<<endl;
for(I=0;I<N;I++){
cout<<I+1<<char(248)<<" alunno "<<endl;
cout<<endl;
cout<<"Nome: "<<alunni[I].nome<<endl;
cout<<"Cognome: "<<alunni[I].cognome<<endl;
cout<<"Classe: "<<alunni[I].classe<<endl;
cout<<endl;
cout<<"Scritto 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Scritto: "<<alunni[I].scritto1quad<<endl;
}

cout<<endl;
cout<<"Orale 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Orale: "<<alunni[I].orale1quad<<endl;
}
cout<<endl;
cout<<"Pratico 1"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Pratico: "<<alunni[I].pratico1quad<<endl;
}

cout<<endl;
cout<<"Scritto 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Scritto: "<<alunni[I].scritto2quad<<endl;
}

cout<<endl;
cout<<"Orale 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Orale: "<<alunni[I].orale2quad<<endl;
}

cout<<endl;
cout<<"Pratico 2"<<char(248)<<" quadrimestre: "<<endl;
cout<<endl;

for(I=0;I<4;I++){
cout<<"Pratico: "<<alunni[I].pratico2quad<<endl;
}
}
}


int main()
{
Tregistro alunni;
int N;

acquisiscialunni(alunni,N);
visualizzaalunni(alunni,N);


system("PAUSE");
return 0;
}

oregon
22-05-2009, 16:33
Chiarisci cosa succede e perche' usi nei cicli for il valore 4 come massimo ...

Gybra
22-05-2009, 16:38
perchč deve acquisire 4 voti per materia e poi mi fa l acquisizione di un solo alunno anche se inserisco 2 come acquisizione di alunni

oregon
22-05-2009, 16:46
Originariamente inviato da Gybra
perchč deve acquisire 4 voti per materia

Ma se scrivi

for(I=0;I<4;I++){
cout<<"Scritto: "<<alunni[I].scritto1quad<<endl;
}

la I in alunni[I] riguardera' il numero dell'alunno, non della materia ... e' tutto da correggere ...


e poi mi fa l acquisizione di un solo alunno anche se inserisco 2 come acquisizione di alunni

E ti chiedevo, come te ne accorgi?

Gybra
22-05-2009, 16:50
me ne accorgo perchč appena finisco di inserire l ultimo voto del pratico del primo alunno finisce l acquisizione e passa alla visualizzazione

oregon
22-05-2009, 16:53
Ovviamente se usi delle for all'interno di altre for, non puoi SEMPRE usare la stessa variabile I ...

Gybra
22-05-2009, 16:54
ok grazie adesso provo comunque non sapevo che non si potessero usare stesse variabili in piu cicli for annidati

oregon
22-05-2009, 16:56
Originariamente inviato da Gybra
ok grazie adesso provo comunque non sapevo che non si potessero usare stesse variabili in piu cicli for annidati

Mi sembra ovvio che la seconda for ti fa perdere il valore che assume la variabile durante il primo for ... mica puo' tenere memorizzati due valori distinti ...

mondobimbi
22-05-2009, 17:13
Originariamente inviato da Gybra
ok grazie adesso provo comunque non sapevo che non si potessero usare stesse variabili in piu cicli for annidati

le puoi usare ma cosė


for(int I=0;I<4;I++){
....
}



in modo da rendere I variabile locale interna al ciclo.

ciao
sergio

Gybra
22-05-2009, 17:15
no ma in quella maniera ne acquisira solo 4 a me servono n acquisizione che stabilisce l utente comunque ho risolto utilizzando diverse variabili per ogni ciclo

Loading