View Full Version : File of struct
Ragazzi dovrei creare un file di struct(o record)
Volevo sapere l'istruzione per stampare all'interno del file il record d'appoggio, ho provato con f1<<rubr;
ma mi dice
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct id' (or there is no acceptable conversion)
il file è di testo:
fstream f1;
....
....
f1.open("text.txt",ios::out);
...
...
f1<<rubr;
f1.close();
perchè?
ho provato cosi:
FILE *stream = fopen("miofile.txt","w");
...
...
fprintf(stream,rubr.nome);
F1.CLOSE();
funziona pero' devo stampare ogni volta campo per campo...
io invece cercavo qualche comando che stampasse tutto il record direttamente.
Per scrivere usa la funzione
fwrite
Fenomeno85
24-02-2005, 15:59
scrivi con fwrite e per leggere usa fread ;)
~§~ Sempre E Solo Lei ~§~
Ok funziona pero' solo con vettori di record, se utilizzo solo record(struct) non funziona:
{
printf("Inserisci Nome");
gets(rub.nome);
printf("Inserisci Numero ");
gets(rub.num);
printf("Inserisci cell ");
gets(rub.cell);
printf("Inserisci Indirizzo");
gets(rub.indirizzo.indiri);
printf("Inserisci Numero civico ");
gets(rub.indirizzo.n);
fwrite(rub,1,100,stream);
i++;
}
Probabilmente per i 2 valori centrali 1 e 100
Come faccio?
Devo usare per forza un vettore di record per usare fwrite?
Fenomeno85
24-02-2005, 18:58
fwrite (&rub, sizeof(rub), 1, stream);
così si salva una variabile di tipo struttura
~§~ Sempre E Solo Lei ~§~
Ok Grazie
xò nn mi spiego una cosa normalmente dovrei usare:
fwrite (rub,1,100,stream)
come mi hai scitto tu invece:
fwrite (&rub, sizeof(rub), 1, stream);
cioè la grandezza massima della struttura, e la dimensione massima di un elemento si scambiano di posto nel secondo caso
come mai?
Spero di essere stato chiaro
Fenomeno85
24-02-2005, 20:46
what?? usa sempre sizeof per calcolare la grandezza della struttura dati mai metterci i valori calcolati da te.
~§~ Sempre E Solo Lei ~§~
il funzionamento di fwrite è questo...
struct X ciao[n];
fwrite (ciao,n,sizeof(struct X),stream);
Cioè il principio dei due parametri è:
Scrivi n elementi, ed ogni elemento è grande sizeof(struct X).
e quindi scrivere
fwrite (ciao,n*sizeof(struct X),1,stream);
è la sessa cosa.
infatti per capire quanti byte vengono scritti devi appunto moltiplicare i due parametri.
Ciao .....
ok ma se ho una struttura del genere:
struct id
{
char nome[15];
char cognome[15];
char num[15];
char cell[15];
indiriz indirizzo;
}rubrica;
e quando carico la struttura nel file non conosco il numero di elementi (n) da caricare come faccio?metto solo sizeof(rub)?
La mia funzione di caricamento infatti si fermerà quando cognome sarà uguale a "menu" .
forse se faccio cosi:fwrite(&rub,sizeof(rub),sizeof(rub),stream);
dovrebbe andare bene, che dite?
Fenomeno85
25-02-2005, 15:20
Originariamente inviato da gio84
ok ma se ho una struttura del genere:
struct id
{
char nome[15];
char cognome[15];
char num[15];
char cell[15];
indiriz indirizzo;
}rubrica;
e quando carico la struttura nel file non conosco il numero di elementi (n) da caricare come faccio?metto solo sizeof(rub)?
La mia funzione di caricamento infatti si fermerà quando cognome sarà uguale a "menu" .
forse se faccio cosi:fwrite(&rub,1,sizeof(rub),stream);
dovrebbe andare bene, che dite?
adesso funziona.
~§~ Sempre E Solo Lei ~§~
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.