Salve, posto questo esercizio sui file binari...

Spiegazione :
partendo da due file binari, articoli.dat e acquisti.dat,
dovrei crearne un altro contenente gli articoli in comune(verificabili tramite codice)
ora ho svolto le procedure di inserimento e stampa.... la parte dove c'è
//presunto errore
penso sia la parte non funzionante che dovrebbe appunto scrivere sul terzo file
gli elementi in comune
ho svolto due for, e ho effettuato il controllo sui codici, se comuni, metti in aggiorna.dat.

codice:
/*
Due file binari di nome “articoli.dat”  e “acquisti.dat”  
rappresentano rispettivamente gli articoli e gli acquisti di una certa azienda. 
Effettuare una ricerca, se un articoli è presente in entrambi i file,
salvarlo uin un file "aggiorna.dat"
*/

#include<iostream>
#include<fstream>
#include<string>

//clearscreen

#ifdef _WIN32
const char* pulisci = "cls";
#else
#ifdef linux
const char* pulisci = "clear";
#else
#error OS non supportato
#endif
#endif

using namespace std;

struct TpArticolo {
   int codice;
   char descrizione[20];
   int iva;
   float costo, costoM; // costoM è il costo medio
   int giacenza;
};

struct TpAcquisto {
   int codart;	// è il codice articolo
   int quanto;
   float costo;
};

struct TpAggiorna {
   TpAcquisto acquisto;
   float costoM;
};
    
const char     
 articolo[]="articoli.dat";
const char     
 acquisti[]="acquisti.dat";
const char     
 aggiorna[]="aggiorna.dat";
 

// prototipi

int MenuScelta();
void Inserimento(TpArticolo&, char&);
void Inserimento2(TpAcquisto& , char& );
void Stampa(const TpArticolo&);
void Stampa2(const TpAcquisto&);


int main () {
    
  TpArticolo articolo1;
  TpAcquisto acquisto1;
  TpAggiorna aggiornato1;
  
  const int LTpArt=sizeof(TpArticolo);  // lunghezza della struttura TpArticolo
  const int LTpAcq=sizeof(TpAcquisto); // lunghezza della struttura TpAcquisto
  
  
  fstream filearticolo; 		// definizione ed apertura alla fine del file
  filearticolo.open(articolo, ios::in|ios::out|ios::binary|ios::ate);
  
  if (!filearticolo) {		//se il file non esiste lo crea con l'istruzione seguente         
      filearticolo.open("articoli.dat", ios::in|ios::out|ios::binary|ios::ate);
  return 1;	 }
  
  fstream fileacquisti; 		// definizione ed apertura alla fine del file
  fileacquisti.open(acquisti, ios::in|ios::out|ios::binary|ios::ate);
  
  if (!fileacquisti) {		//se il file non esiste lo crea con l'istruzione seguente         
      fileacquisti.open("acquisti.dat", ios::in|ios::out|ios::binary|ios::ate);
  return 1;	 }
  
  fstream fileaggiorna; 		// definizione ed apertura alla fine del file
  fileaggiorna.open(aggiorna,ios::in|ios::out|ios::binary|ios::ate);
  
  if (!fileaggiorna) {		//se il file non esiste lo crea con l'istruzione seguente         
      fileaggiorna.open("aggiorna.dat",ios::out|ios::binary|ios::trunc|ios::ate);
  return 1;	 }
  
  int NumTpArticoli, NumTpAcquisti, NumAggiorna;
  NumTpArticoli=filearticolo.tellg()/LTpArt; //calcola il numero di articoli nel file Articoli
  NumTpAcquisti=fileacquisti.tellg()/LTpAcq; //calcola il numero di articoli nel file Acquisti
  NumAggiorna=fileaggiorna.tellg()/LTpArt; //calcola il numero di articoli nel file Articoli
  
  int i;  
  int scelta;
  char ch;
    
    //scelta menu
    do{
             system(pulisci);
             scelta=MenuScelta();
             cout<<"Numero articoli : "<<NumTpArticoli<<endl;
             cout<<"Numero acquisti : "<<NumTpAcquisti<<endl;
             switch(scelta){
                            case 1:
                                 //inserimento
                                 cout<<" INSERIMENTO ARTICOLI IN S-ARTICOLI "<<endl;
                                 Inserimento(articolo1,ch);
                                 if(ch=='s')
                                    filearticolo.seekp(0,ios::end);
                                    filearticolo.write((char*)&articolo1, LTpArt);
                                 NumTpArticoli++;
                                 break;
                                 
                            case 2:
                                 //inserimento
                                 cout<<" INSERIMENTO ACQUISTI IN S-ACQUISTI "<<endl;
                                 Inserimento2(acquisto1,ch);
                                 if(ch=='s')
                                    fileacquisti.seekp(0,ios::end);
                                    fileacquisti.write((char*)&acquisto1, LTpAcq);
                                 NumTpAcquisti++;
                                 break;   
                                                               
                            case 3:
                                //Stampa dati
                                 cout<<" STAMPA ARTICOLi "<<endl;
                                 filearticolo.seekg(0, ios::beg);
                                 for(int i=0;i<NumTpArticoli;i++){
                                         filearticolo.read((char*)&articolo1,LTpArt);
                                         Stampa(articolo1);
                                    }
                                 system("pause");   
                                 break;
                                 
                            case 4:
                                //Stampa dati
                                 cout<<" STAMPA ACQUISTI "<<endl;
                                 fileacquisti.seekg(0, ios::beg);
                                 for(int i=0;i<NumTpAcquisti;i++){
                                         fileacquisti.read((char*)&acquisto1,LTpAcq);
                                         Stampa2(acquisto1);
                                    }
                                 system("pause");   
                                 break;     
                                                             
                            case 5:
                                //AGGIORNAMENTO dati
                                //PRESUNTO ERRORE
                                 cout<<" AGGIORNA ACQUISTI "<<endl;
                                 
                                 fileacquisti.seekg(0, ios::beg);
                                 filearticolo.seekg(0, ios::beg);
                                 for(int i=0;i<NumTpAcquisti;i++){
                                         fileacquisti.read((char*)&acquisto1,LTpAcq);
                                         for(int i=0;i<NumTpArticoli;i++){
                                                 filearticolo.read((char*)&articolo1,LTpArt);
                                                 if(acquisto1.codart==articolo1.codice){
                                                    fileaggiorna.write((char*)&articolo1, LTpAcq);
                                                    
                                                    }
                                         }
                                 }
                                
                                 system("pause");   
                                 break;   
                                 
                            case 6:
                                //Stampa dati
                                 cout<<" STAMPA AGGIORNA "<<endl;
                                 fileaggiorna.seekg(0, ios::beg);
                                 for(int i=0;i<NumAggiorna;i++){
                                         filearticolo.read((char*)&articolo1,LTpArt);
                                         Stampa(articolo1);
                                    }
                                 system("pause");   
                                 break;                                 
                                   
                             }
                             
                                 
                                 fileaggiorna.close();
                                 filearticolo.close();
                                 fileacquisti.close();
                                 }while(scelta>0&&scelta<7);           

}
         

int MenuScelta(){
    int sc;
    do{
        cout<<"GESTIONE MAGAZZINO"<<endl;
        cout<<"\n";
        cout<<"1 - INSERIMENTO ARTICOLO"<<endl;
        cout<<"2 - INSERIMENTO ACQUISTI"<<endl;
        cout <<"3 - STAMPA ARTICOLi"<<endl;
        cout <<"4 - STAMPA ACQUISTI"<<endl; 
        cout <<"5 - AGGIORNA ACQUISTI"<<endl;  
        cout <<"6 - STAMPA AGGIORNA"<<endl;    
        cout <<"7 - FINE"<<endl;
        cin>>sc;
        }
        while(sc<1||sc>7);
        return sc;
}

void Inserimento(TpArticolo& articolo1, char& ch){
     cout<<"INSERIMENTO ARTICOLO"<<endl;
     cout<<"Codice : ";
     cin>>articolo1.codice;
     cout<<"Descrizione : ";
     cin>>articolo1.descrizione;
     cout<<"Iva : ";
     cin>>articolo1.iva;
     cout<<"Costo : ";
     cin>>articolo1.costo;
     cout<<"Costo : ";
     cin>>articolo1.costoM;
     cout<<"Giacenza : ";
     cin>>articolo1.giacenza;     
     cout<<"Salva(s/n) : ";
     cin>>ch;
}

void Inserimento2(TpAcquisto& acquisto1, char& ch){
     cout<<"INSERIMENTO ARTICOLO"<<endl;
     cout<<"Codice : ";
     cin>>acquisto1.codart;
     cout<<"Quantita' : ";
     cin>>acquisto1.quanto;
     cout<<"Costo : ";
     cin>>acquisto1.costo;  
     cout<<"Salva(s/n) : ";
     cin>>ch;
}

void Stampa(const TpArticolo& articolo1){
     cout<<"Codice : "<<articolo1.codice<<" ";
     cout<<"Descrizione : "<<articolo1.descrizione<<" ";
     cout<<"IVA : "<<articolo1.iva<<" ";
     cout<<"Costo : "<<articolo1.costo<<" ";
     cout<<"Costo Medio : "<<articolo1.costoM<<" ";
     cout<<"Giaenza : "<<articolo1.giacenza<<" ";
     cout<<endl;
       
}

void Stampa2(const TpAcquisto& acquisto1){
     cout<<"Codice : "<<acquisto1.codart<<" ";
     cout<<"Quantita' : "<<acquisto1.quanto<<" ";
     cout<<"Costo : "<<acquisto1.costo<<" ";
     cout<<endl;
       
}
grazie