Originariamente inviato da mondobimbi
se ricordo bene c'è una funzione membro che si chiama seek che ha lo stesso comportamento
prova a cercare ifstream seek
ciao
sergio
Grazie!! Ora sono riuscito a far tornare il puntatore all'inizio del file ma il programma su cui sto lavorando continua a non funzionare, quindi ho deciso di postarlo per darlo in pasto alle vostre menti immense rispetto alla mia, dal punto di vista della programmazione.
Ci sono dei controlli attivi all'interno del programma, utilizzati per cercare il punto dove si verifica il problema. Da quello che ho capito, pur riportando il valore del contatore a zero, legge correttamente il primo valore del file, ma non il secondo. Accetto consigli e critiche, non possono che migliorarmi.
Grazie in anticipo.
codice:
/*
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(){
ifstream file("studenti1.txt"); fstream file1("tesi.txt");
int matric,matrict,sost,nnsost,voto,somma=0,nex=0;
char persona[30],personac[30],nomex[30];
if(!file){
file.open("studenti1.txt");
cerr<<"Impossibile aprire il file studenti1.txt"<<endl;
system("pause");
return -1;
}
if(!file1){
file1.open("tesi.txt");
cerr<<"Impossibile aprire il file tesi.txt"<<endl;
system("pause");
return -1;
}
while(!file.eof()){
file>>matric;
cout<<matric<<endl;
file>>persona;
cout<<persona<<endl;
file>>personac;
cout<<personac<<endl;
file>>sost;
cout<<sost<<endl;
file>>nnsost;
cout<<nnsost<<endl;
file1.seekp(0,ios::beg);
cout<<file1.tellg();
if(nnsost==0){
cout<<"Controllo"<<endl;
while(!file1.eof()){
file1>>matrict;
cout<<matrict;
file1>>persona;
file1>>personac;
if(matrict==matric){
for(int i=0;i<sost;i++){
file>>nomex;
file>>voto;
somma+=voto;
nex++;
}
cout<<matric<<" "<<(somma/nex)<<endl;
nex=0;
}
// system("pause");
}
//file1.close();
//file1.open("tesi.txt");
}
// cout<<"Controllo";
if(somma==0){
for(int i=0;i<sost;i++){
file>>nomex;
file>>voto;
}
}
somma=0;
}
file.close();
system("pause");
return 0;
}
I due files:
studenti1.txt
codice:
1209
Ferme Vincenzo
2 0
Informatica 28
Economia 23
1210
Fermi Vincenzi
2 0
Programmazione 28
Scienze 23
tesi.txt
codice:
1210
Fermi Vincenzi
1209
Ferme Vincenzo