Salve gente purtroppo ho un problema con il caricamento da File nel mio programma che realizza una libreria.
Vi spiego cosa avviene, una volta che salvo su File una Casa Editrice con i seguenti campi:
Nome, Iva, Telefono, Fax, questi 4 campi fanno parte della classe Casa_Ed mentre indirizzo e Codice Casa Editrice fanno parte di altre due classi separate, effettuo l'overload degli operatori >> e << in questo modo:
friend istream &operator>>(istream &stream, Casa_Ed &obCasa_Ed);
friend ostream &operator<<(ostream &stream, Casa_Ed obCasa_Ed);
Sembra che il salvataggio su File avvenga in modo corretto, il problema sorge una volta che il file viene CARICATO.
Quando viene caricato il file, il campo Nome viene saltato, come se non leggesse nulla infatti viene messo questo "", nel campo Iva viene messo in Nome e quindi viene tutto scalato.
Non riesco a capire il problema qualcuno di voi saprebbe darmi una spiegazione?
codice:
/*OVERLOAD OPERATORI*/
istream &operator>>(istream &stream, Casa_Ed &obCasa_Ed)
{
obCasa_Ed.Inizializzatore();
char str[100]="\0";
stream.getline(str,99);
obCasa_Ed.Nome=new char [strlen(str)+1];
strcpy(obCasa_Ed.Nome, str);
stream.getline(str,99);
obCasa_Ed.Iva=new char [strlen(str)+1];
strcpy(obCasa_Ed.Iva, str);
stream.getline(str,99);
obCasa_Ed.Telefono=new char [strlen(str)+1];
strcpy(obCasa_Ed.Telefono, str);
stream.getline(str,99);
obCasa_Ed.Fax=new char [strlen(str)+1];
strcpy(obCasa_Ed.Fax,str);
stream >> obCasa_Ed.ind;
stream >> obCasa_Ed.Cd;
return stream;
}
ostream &operator<<(ostream &stream, Casa_Ed obCasa_Ed)
{
stream << obCasa_Ed.Nome << "\n";
stream << obCasa_Ed.Iva <<"\n";
stream << obCasa_Ed.Telefono << "\n";
stream << obCasa_Ed.Fax << "\n";
stream << obCasa_Ed.ind << "\n";
stream << obCasa_Ed.Cd << "\n";
return stream;
}
//SALVASU FILE
template<int Q>
void Biblioteca<Q>::Salva() const
{
int i;
char str[100];
cout<<"\nSalvataggio Biblioteca NOME: ";
cin.getline(str, 99);
ofstream out(str, ios::out | ios::binary | ios::app);
if(!out){
cout<<"IMPOSSIBILE APRIRE IL FILE\n";
exit(EXIT_FAILURE);
}
out<< Casa << "\n";
out<< Vol <<"\n";
for(i=0; i<Casa; i++) out << ArrayCasa[i] << "\n";
VolQDisp *x=Lista_Vol;
for(i=0; i<Vol; i++)
{
out << ArrayVolume[i] << "\n";
if(x!=0){
out << x->isbn << "\n";
out << x->q << "\n";
x=x->prox;}
}
out.close();
cout << "\nSALVATAGGIO COMPLETATO";
}
//CARICAMENTO DA FILE
template<int Q>
void Biblioteca<Q>::Carica()
{
char str[100]="\0";
int i, Q;
ISBN Isbn;
cout<<"\nCarica la Biblioteca, NOME FILE: ";
cin.getline(str,99);
ifstream in(str, ios::in | ios::binary);
if(!in){
cout<<"IMPOSSIBILE APRIRE IL FILE\n";
exit(EXIT_FAILURE);
}
in>> Casa;
in>> Vol;
for(i=0; i<Casa; i++) in >> ArrayCasa[i];
for(i=0; i<Vol; i++) {
in >> ArrayVolume[i];
in >> Isbn;
in >> Q;
}
in.close();
cout<<"\nCARICAMENTO EFFETTUATO";
}