Così dovrebbe funzionare, anche se non ne ho la certezza in quanto non ho un compilatore C++...codice:#include <iostream> #include <stdio.h> #include <string.h> using namespace std; struct lazio { char nome [30]; }; const size_t lazio_size = sizeof(char) * 30; const size_t lazio_nome_size = sizeof(char) * 30; void write_struct(lazio *x, FILE *fp); size_t read_struct(lazio *x, FILE *fp); void back_one_struct(FILE *fp); int menu (); void inserimento (); void modifica (); void stampa (); //------------------------------- main ---------------------------------------- int main() { int s; do { s=menu(); switch (s) { case 1: inserimento (); break; case 2: modifica (); break; case 3: stampa (); break; case 4: cout<<" "<<endl; } } while (s!=4); return 0; } int menu () { int scelta; cout<<"1 Inserimento "<<endl; cout<<"2 Modifica "<<endl; cout<<"3 Stampa "<<endl; cout<<"4 Exit "<<endl; cout<<" Scelta -> "; cin>>scelta; return scelta; } void inserimento () { FILE *fp; lazio x; fp=fopen("Lazio.dat","a+b"); //Apertura file cout<<"Nome: "; cin>>x.nome; write_struct(&x, fp); //Scrittura nel file fclose (fp);//Chiusura File } void modifica () { FILE *fp; lazio x; char y[30]; int k=0; int z=-1; cout<<"Inserire un nome: "; cin>>y; //Variabile che si confronterà con quella del file fp=fopen("Lazio.dat", "r+b"); //Apertura File while ( read_struct(&x, fp) ) //Ciclo che legge tutto il file { if ( strcmp (y,x.nome)==0 ) { cout<<"Nuovo nome: "; cin>>x.nome; back_one_struct(fp); write_struct(&x, fp); k++; //Dopo aver trovato il nome, incrementiamo questa variabile per il controllo se qualcosa è stato modificato o meno } } if (k==0) cout<<"Nome non trovato."<<endl; fclose (fp); } void stampa () { FILE *fp; lazio x; fp=fopen("Lazio.dat", "rb"); //Apertura File while ( read_struct(&x, fp) ) { cout<<"Nome: "<<x.nome<<endl; } fclose (fp); } void write_struct(lazio *x, FILE *fp) { fwrite(x->nome, lazio_nome_size, 1, fp); } size_t read_struct(lazio *x, FILE *fp){ return fread(x->nome, lazio_nome_size, 1, fp); } void back_one_struct(FILE *fp){ fseek(fp, -lazio_size, SEEK_CUR); }

Rispondi quotando