PDA

Visualizza la versione completa : [C++] Problema in lettura da file di testo.


Skull260287
14-05-2008, 16:11
Salve a tutti, ho questo algoritmo:



/*

Siano dati due file testo: studenti.txt e tesi.txt. Il primo contiene
informazioni riguardanti tutti gli studenti di un corso di laurea;
il secondo contiene informazioni riguardanti i soli studenti del medesimo
corso di laurea che hanno gi fatto richiesta della tesi.
Entrambi i file sono ordinati per numero di matricola crescente.
Scrivere una procedura che mostri a video la matricola e la media di
tutti gli studenti che hanno richiesto la tesi e che hanno svolto tutti gli esami.
*/

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(){


fstream tesi ("tesi.txt", fstream::in | fstream::out);
fstream studenti ("studenti.txt", fstream::in | fstream::out);

if(!tesi.is_open()) {
cout << "Il file studenti.txt non esiste\n";
return 1;
}

if(!studenti.is_open()) {
cout << "Il file studenti.txt non esiste\n";
return 1;
}


while (!tesi.eof()) {

char matricola_tesi[256], nome[256];

tesi.getline(matricola_tesi, 256);
tesi.getline(nome, 256);

while (!studenti.eof()) {
char matricola_studente[256];
studenti.getline(matricola_studente, 256);
somma=0;
media=0;
for(int i=0;i<sost;i++){

studenti>>nomesame;
cout<<nomesame<<endl;
studenti>>voto;
cout<<voto<<endl;
somma+=voto;
}
media=(somma/sost);
cout<<media<<endl;

if (!strcmp(matricola_tesi, matricola_studente)) {
cout << "ok " << matricola_studente << "\n";
break;
}
}
studenti.seekg (0, ios::beg);
}


studenti.close();
tesi.close();

return 0;

}


I file su cui ho effettuato il test sono:


studenti1.txt


1209
Ferme Vincenzo
2 0
Informatica 28
Economia 23
1210
Fermi Vincenzi
2 0
Programmazione 28
Scienze 23


tesi.txt


1210
Fermi Vincenzi
1209
Ferme Vincenzo




I Problemi riscontrati sono:


1) File studenti.txt con i dati di 2 Studenti, file tesi.txt con i dati dei due studenti presenti all'interno del file studenti.txt:

La media non viene aggiornata ma rimane quella calcolata per il primo studente, mettendo un di cout ho scoperto che non viene proprio toccata la parte relativa al secondo studente.


2) File studenti.txt con i dati di 2 Studenti, file tesi.txt con i dati di uno dei 2 studenti presenti all'interno del file studenti.txt:

Succede la stessa cosa descritta prima


Vi prego di aiutarmi, grazie 1000

oregon
14-05-2008, 16:44
Manca la dichiarazione di tutte le variabili e il codice non viene compilato ... fornisci un testo compilabile ...

Skull260287
14-05-2008, 18:22
Originariamente inviato da oregon
Manca la dichiarazione di tutte le variabili e il codice non viene compilato ... fornisci un testo compilabile ...

Scusate, ecco qui:



#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(){

fstream tesi ("tesi.txt", fstream::in | fstream::out);
fstream studenti ("studenti1.txt", fstream::in | fstream::out);

if(!tesi.is_open()) {
cout << "Il file tesi.txt non esiste\n";
return -1;
}

if(!studenti.is_open()) {
cout << "Il file studenti1.txt non esiste\n";
return -1;
}

int sost,nnsost,voto,media,somma,ms=0,mt=0,z=0;
char nomesame[256],matricola_tesi[256], nome[256], matricola_studente[256];

while (!tesi.eof()) {

tesi.getline(matricola_tesi, 256);
cout<<matricola_tesi<<endl;
mt=0;z=0;
while(matricola_tesi[z]!='\0'){

mt+=(int)matricola_tesi[z]-(int)'0';
//cout<<k<<endl;
mt*=10;
z++;
}
mt=mt/10;
cout<<mt<<endl;
system("pause");
tesi.getline(nome, 256);
cout<<nome<<endl;
system("pause");

while (!studenti.eof()) {
cout<<"SONO SU"<<endl;
//int b=studenti.tellg();
//int l=b-8;
//if(b!=0) studenti.seekg (l, ios::beg);
studenti.getline(matricola_studente, 256);
cout<<matricola_studente<<endl;
z=0;ms=0;
while(matricola_studente[z]!='\0'){

ms+=(int)matricola_studente[z]-(int)'0';
//cout<<k<<endl;
ms*=10;
z++;
}
ms=ms/10;
cout<<ms<<endl;
system("pause");
studenti.getline(nome, 256);
cout<<nome<<endl;
studenti>>sost;
cout<<sost<<endl;
studenti>>nnsost;
cout<<nnsost<<endl;
//cout<<studenti.tellg()<<endl;
somma=0;
media=0;
int i=0;
while(i<sost){
studenti>>nomesame;
cout<<nomesame<<endl;
studenti>>voto;
cout<<voto<<endl;
somma+=voto;
i++;
}
media=(somma/sost);
cout<<media<<endl;
//cout<<studenti.tellg()<<endl;

if (ms==mt) {
cout << "ok " << ms << " "<<media<<"\n";
break;
}
cout<<"TORNO SU"<<endl;
}
cout<<"RIPETO IL FILE"<<endl;
studenti.clear();
studenti.seekg (0, ios::beg);
}


studenti.close();
tesi.close();

system("pause");
return 0;
}

Skull260287
20-05-2008, 21:50
Qualcuno riuscito a scoprire il problema?

Loading