PDA

View Full Version : File of struct


gio84
23-02-2005, 17:11
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è?

gio84
23-02-2005, 17:46
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.

tglman
24-02-2005, 15:32
Per scrivere usa la funzione
fwrite

Fenomeno85
24-02-2005, 15:59
scrivi con fwrite e per leggere usa fread ;)

~§~ Sempre E Solo Lei ~§~

gio84
24-02-2005, 18:23
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 ~§~

gio84
24-02-2005, 19:45
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 ~§~

tglman
25-02-2005, 08:47
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 .....

gio84
25-02-2005, 13:16
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 ~§~