La nuova codifica, comunque sbagliata...

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 )
    {
    
      fseek (fp, 0, SEEK_CUR);

      cout<<"Nuovo nome: ";
      cin>>x.nome;
      fseek(fp, z, SEEK_CUR);
      fwrite (&x, sizeof(lazio), 1, fp); //Scriviamo sul File
      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);
}