Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-05-2007, 12:40   #1
>|HaRRyFocKer|
Senior Member
 
L'Avatar di >|HaRRyFocKer|
 
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);
e questo dovrebbe significare che il file è aperto in input e output e che entrambi i cursori (di lettura e scrittura si sarebbero trovati alla fine del file). Ora però, quando io attraverso la linea di comando

Codice:
file.seekg(0,ios::beg);
dovrei teoricamente portare il cursore all'inizio del file, i dati precedentemente inseriti non me li stampa.

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);
	}
}
Grazie a chi mi aiuterà
__________________
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!
>|HaRRyFocKer| è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 13:36   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Non sono sicuro però prova a fare un flush prima di spostarti
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 14:30   #3
>|HaRRyFocKer|
Senior Member
 
L'Avatar di >|HaRRyFocKer|
 
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Non sono sicuro però prova a fare un flush prima di spostarti
Vale a dire...?
__________________
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!
>|HaRRyFocKer| è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 14:39   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
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
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 14:50   #5
skerdz
Junior Member
 
L'Avatar di skerdz
 
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.
skerdz è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 17:05   #6
>|HaRRyFocKer|
Senior Member
 
L'Avatar di >|HaRRyFocKer|
 
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!
>|HaRRyFocKer| è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2007, 22:27   #7
skerdz
Junior Member
 
L'Avatar di skerdz
 
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.
skerdz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Il nuovo Sony Xperia 10 VII si mostra on...
Samsung raddoppia: il Galaxy Z Fold 8 sa...
Gli smartphone premium sono sempre pi&ug...
Fusione nucleare, l'Italia entra in gioc...
AMD protagonista al CES 2026: il keynote...
Invia il tuo nome intorno alla Luna con ...
Apple presenta i nuovi iPhone 17 Pro e P...
Apple presenta iPhone 17: fotocamera Cen...
Apple annuncia l''impossibilmente sottil...
Apple Watch Series 11 ufficiale: il più ...
Apple svela Watch Ultra 3 e Watch SE 3: ...
AirPods Pro 3 ufficiali: cancellazione d...
Kia EV3 è una Xbox 'che fa brum':...
Nel 2026 cambiano le regole della F1. Me...
Concept THREE: al salone di Monaco Hyund...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v