Ragazzi,oltre al su citato problema, ho riscontrato che non posso modificare l'ultimo dato che ho inserito nel file..vi posto il codice per migliore chiarezza...questo programmino è parte di un programma che devo portare ad un esame(riadattato solo per memorizzare,modificare e visualizzare...vi prego di aiutarmi,perchè non so più che pesci prendere![]()
![]()
![]()
![]()
![]()
...grazie
#include <iostream>
using namespace std;
class one //classe da memorizzare
{
public:
char n[10];
char tel[7];
friend void mod();
friend void vis();
friend void insert_file(class one);
void insert();
void visual();
};
//funzione di inserimento nell'oggetto
void one::insert()
{
cin>>n;
cin>>tel;
}
//funzione di visualizzazione dell'oggetto, anche se nn la utilizzo
void one::visual()
{
cout<<"nome: "<<n;
cout<<"\ntelefono: "<<tel;
}
//il main
int main()
{
class one op;
int i,n;
cout<<"quante persone vuoi inserire? ";
cin>>n;
for(i=0;i<n;i++)
{
op.insert();
insert_file(op);
}
vis();
mod();
vis();
return 0;
}
//funzione di modifica
void mod()
{
int pos=0;
int flag=0;
class one op;
char a[10];
FILE *p;
cout<<"inserisci cristiano: ";
cin>>a;
p=fopen("prova.bin","r+b");
while(!feof(p))
{
fread(&op,sizeof(class one),1,p);
if(strcmp(op.n,a)==0)
{
pos=ftell(p);
cout<<pos;
fseek(p,(pos-sizeof(class one)),SEEK_SET);
pos=ftell(p);
cout<<pos;
strcpy(op.tel,"000000");
fwrite(&op,sizeof(class one),1,p);
fseek(p,(pos+sizeof(class one)),SEEK_SET);
}
}
fclose(p);
}
//funzione di visualizzazione
void vis()
{
class one op;
int c=0;
FILE *p;
p=fopen("prova.bin","rb");
while(!feof(p))
{
fread(&op,sizeof(class one),1,p);
cout<<"\n"<<op.n<<"\n"<<op.tel<<endl;
c++;
}
cout<<c;
fclose(p);
}
//funzione di inserimento nel file
void insert_file(class one o)
{
FILE *p;
p=fopen("prova.bin","a+b");
fwrite(&o,sizeof(class one),1,p);
fclose(p);
}

Rispondi quotando