Scusate per il post di prima, ma i miei mi reclamavano per andare a cenare D:

Volevo comunque dire che, quando lancio il programma, l'inserimento dei dati e la stampa funziona, ma c'è un problema nella modifica. Riesce a trovare il campo da modificare, mi fa inserire il nuovo campo che dovrebbe sostituire quello precedente ma non me lo modifica...

Sto impazzendo e non riesco a risolvere il problema, qualcuno può aiutarmi? Grazie in anticipo!

CODICE:
*Non riesco ad inserirlo in modo corretto, non so il perché*

codice:
#include <iostream> 
#include <stdio.h> 

using namespace std; 

struct lazio { 
  char nome [30]; 
                }; 

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; 

  fwrite (&x, sizeof(lazio), 1, 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 ( fread ( &x, sizeof (lazio), 1, fp ) ) //Ciclo che legge tutto il file 
  { 
    if ( strcmp (y,x.nome)==0 ) 
    { 
      cout<<"Nuovo nome: "; 
      cin>>x.nome; 
      
      fwrite (&x, sizeof(lazio), 1, fp); //Scriviamo sul File 
      fseek(fp, z, SEEK_CUR); 
      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 ( fread ( &x, sizeof (lazio), 1, fp ) ) 
  { 
    cout<<"Nome: "<<x.nome<<endl; 
  } 
  fclose (fp); 
}