Alex88na
10-05-2008, 22:01
Salve, se dichiaro un campo di una struct di tipo stirng non ho nessun problema, i problemi nascono quando devo caricare dei struct con campi di tipo string da un file binario in un array, vi posto il codice:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
//STRUCT
struct Tpdata{
int giorno;
int mese;
int anno;
};
struct Tpsoci{
char nome[20];
char cognome[20];
string indirizzo;
Tpdata data;
};
//PROTOTIPI
void inserimento(Tpsoci &);
int main() {
const int max=100;
char nome_file[max];
int NumSoci;
Tpsoci socio;
const int LSoci=sizeof(socio);
cout << "Inserisci il nome del file: "; cin >> nome_file;
fstream file1;
file1.open(nome_file, ios::in|ios::out|ios::binary);
if(!file1){
cout << "Il file non e' stato trovato ed e' stato creato." << endl;
file1.open(nome_file, ios::in|ios::out|ios::binary|ios::trunc);
file1.clear();
cout<<"\nInserisci il numero di soci da salvare: "; cin>>NumSoci;
cout << "\n\nScrivere sul file"<<endl;
for(int i=0; i<NumSoci; i++){
inserimento(socio);
file1.seekp(0, ios::end);
file1.write((char*) &socio, LSoci);
}
}
file1.seekg(0, ios::end); //mi posizione alla fine
NumSoci=file1.tellg()/LSoci;
file1.seekg(0, ios::beg); //mi posizione all'inizio
cout<<"NumSoci: "<<NumSoci<<endl;
cout<<"\n\nStampa da file\n\n";
for(int i=0; i<NumSoci; i++){
cout<<"Socio numero "<< i+1 <<endl;
file1.read((char*) &socio, LSoci);
cout << "Nome socio: " << socio.nome
<< "\tCognome: " << socio.cognome
<< "\tIndirizzo: " << socio.indirizzo
<< "\tScadenza tessera: " << socio.data.giorno
<< '/' << socio.data.mese << '/' << socio.data.anno
<< endl;
}
file1.close();
system("pause");
}
void inserimento(Tpsoci &socio){
cout << endl;
cout << "Inserisci il nome: "; cin >> socio.nome;
cout << "Inserisci il cognome: "; cin >> socio.cognome;
cin.ignore();
cout << "Inserisci l'indirizzo: "; getline(cin, socio.indirizzo);
cout << "Dati di iscrizione" << endl;
cout << "Inserisci il giorno: "; cin >> socio.data.giorno;
cout << "Inserisci il mese: "; cin >> socio.data.mese;
cout << "Inserisci l'anno: "; cin >> socio.data.anno;
}
Ed ecco gli screen:
Nell'inserimento dei dati nell'array di record e nlla sua stampa non ho problemi:
http://img166.imageshack.us/img166/9744/insxi7.jpg
Chiuso il programma, lo rieseguo ed ecco cosa succede:
http://img522.imageshack.us/img522/3379/caram5.jpg
Il programma va in crash :(
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
//STRUCT
struct Tpdata{
int giorno;
int mese;
int anno;
};
struct Tpsoci{
char nome[20];
char cognome[20];
string indirizzo;
Tpdata data;
};
//PROTOTIPI
void inserimento(Tpsoci &);
int main() {
const int max=100;
char nome_file[max];
int NumSoci;
Tpsoci socio;
const int LSoci=sizeof(socio);
cout << "Inserisci il nome del file: "; cin >> nome_file;
fstream file1;
file1.open(nome_file, ios::in|ios::out|ios::binary);
if(!file1){
cout << "Il file non e' stato trovato ed e' stato creato." << endl;
file1.open(nome_file, ios::in|ios::out|ios::binary|ios::trunc);
file1.clear();
cout<<"\nInserisci il numero di soci da salvare: "; cin>>NumSoci;
cout << "\n\nScrivere sul file"<<endl;
for(int i=0; i<NumSoci; i++){
inserimento(socio);
file1.seekp(0, ios::end);
file1.write((char*) &socio, LSoci);
}
}
file1.seekg(0, ios::end); //mi posizione alla fine
NumSoci=file1.tellg()/LSoci;
file1.seekg(0, ios::beg); //mi posizione all'inizio
cout<<"NumSoci: "<<NumSoci<<endl;
cout<<"\n\nStampa da file\n\n";
for(int i=0; i<NumSoci; i++){
cout<<"Socio numero "<< i+1 <<endl;
file1.read((char*) &socio, LSoci);
cout << "Nome socio: " << socio.nome
<< "\tCognome: " << socio.cognome
<< "\tIndirizzo: " << socio.indirizzo
<< "\tScadenza tessera: " << socio.data.giorno
<< '/' << socio.data.mese << '/' << socio.data.anno
<< endl;
}
file1.close();
system("pause");
}
void inserimento(Tpsoci &socio){
cout << endl;
cout << "Inserisci il nome: "; cin >> socio.nome;
cout << "Inserisci il cognome: "; cin >> socio.cognome;
cin.ignore();
cout << "Inserisci l'indirizzo: "; getline(cin, socio.indirizzo);
cout << "Dati di iscrizione" << endl;
cout << "Inserisci il giorno: "; cin >> socio.data.giorno;
cout << "Inserisci il mese: "; cin >> socio.data.mese;
cout << "Inserisci l'anno: "; cin >> socio.data.anno;
}
Ed ecco gli screen:
Nell'inserimento dei dati nell'array di record e nlla sua stampa non ho problemi:
http://img166.imageshack.us/img166/9744/insxi7.jpg
Chiuso il programma, lo rieseguo ed ecco cosa succede:
http://img522.imageshack.us/img522/3379/caram5.jpg
Il programma va in crash :(