|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
[C++] File binari...
Allora miei cari, ho fatto per l'università un programmino che si basa sull'uso di un file binario e di strutture... Ora il prof ci ha detto che una volta chiuso il programma, alla seconda esecuzione i dati all'interno del file sono ancora utilizzabili... ora io nell'apertura del file ho fatto
Codice:
fstream file;
file.open("file.dat",ios::binary|ios::in|ios::out|ios::ate);
Codice:
file.seekg(0,ios::beg); Qual'è il problema...? Cos'è che il mio prof non mi ha detto...? In definitiva il codice è questo: Codice:
#include<iostream>
#include<cstdlib>
#include<fstream>
using namespace std;
struct anagrafica{
short int giorno;
short int mese;
short int anno;
char luogo[50];
};
struct Dati{
short nprog;
char nome[30];
char cognome[50];
char telefono[12];
anagrafica fica;
};
short int contatore;
const int lunghezza=sizeof(Dati);
short menu();
void InsertData(Dati&,fstream&);
void stampatutto(Dati&,fstream&);
void ricerca(Dati&,fstream&);
void stampapersona(Dati&);
int main(){
fstream file;
file.open("file.dat",ios::in|ios::out|ios::binary);
if (!file){
file.open("file.dat",ios::in|ios::out|ios::binary|ios::trunc);
cout<<"File creato! Riavviare l'applicazione. ";
return 0;
}
short scelta;
Dati persona;
do {
scelta=menu();
if (scelta==1){
InsertData(persona,file);
}
if (scelta==2)
stampatutto(persona,file);
if (scelta==3)
ricerca(persona,file);
}
while (scelta>0 && scelta<4);
file.close();
return 0;
}
void stampapersona(Dati &persona){
cout<<"N° "<<persona.nprog<<endl<<persona.nome<<" "<<persona.cognome<<endl;
cout<<"Nato a "<<persona.fica.luogo<<" in data "<<persona.fica.giorno<<"/";
cout<<persona.fica.mese<<"/"<<persona.fica.anno<<"\nNumero di telefono: ";
cout<<persona.telefono;
}
short menu(){
short choice;
cout<<"Inserisci la tua scelta: 1 per inserire,2 per stampare tutto, 3 per cercare un cognome: ";
cin>>choice;
return choice;
}
void InsertData (Dati &persona,fstream &file){
char ch;
do {
file.seekp(0,ios::end);
contatore++;
persona.nprog=contatore;
cout<<"Inserisci nome e cognome separati da spazi: ";
cin>>persona.nome>>persona.cognome;
cout<<"\nInserisci ora il numero di telefono: ";
cin>>persona.telefono;
cout<<"\nInserisci ora la tua data di nascita nel formato gg mm aaaa";
cin>>persona.fica.giorno>>persona.fica.mese>>persona.fica.anno;
cout<<"\nInserisci ora il comune di nascita";
cin>>persona.fica.luogo;
cout<<"\nVuoi inserire un nuovo nominativo? y oppure n?: ";
file.write((char*)&persona,lunghezza);
cin>>ch;
}
while (ch=='y');
}
void stampatutto(Dati &persona,fstream &file){
file.seekg(0,ios::beg);
for (int i=0;i<contatore;i++){
file.read((char*) &persona,lunghezza);
stampapersona(persona);
}
}
void ricerca(Dati &persona,fstream &file){
file.seekg(0,ios::beg);
char nomescelto[50],temp[50];
cout<<"\nInserire il cognome desiderato: ";
cin>>nomescelto;
for (int i=0;i<contatore;i++){
file.read((char*) &persona,lunghezza);
if (strcmp(persona.cognome,nomescelto)==0)
stampapersona(persona);
}
}
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Non sono sicuro però prova a fare un flush prima di spostarti
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
Quote:
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Fai un file.flush() prima di spostarti, non sono sicuro che sia quello il problema comunque...
Il flush serve a svuotare il buffer e a scrivere sul file. La stessa cosa avviene automaticamente quando chiudi il file |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2007
Città: 127.0.0.1
Messaggi: 23
|
Se ho capito bele il codice, è strana la cosa che fai, perchè te scrivi sul file ma leggi direttamente dalla struttura, è per quello che al riavvio del programma non trova più niente.
Daniel
__________________
Se hai un sogno, non metterlo mai al secondo posto nella lista delle cose da fare. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
No in realtà leggo anche dal file... Altrimenti non potrei leggere più di una "persona"...
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Mar 2007
Città: 127.0.0.1
Messaggi: 23
|
Se fai in quel modo dovresti chiamare una funzione all'inizio che preleva i dati dal file e li ri-inserisce nelle strutture.
__________________
Se hai un sogno, non metterlo mai al secondo posto nella lista delle cose da fare. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:17.





















