Ciao ragazzi, non capisco perchè non vanno le funzioni rename e remove nel momento in cui vengono poste all'interno del mio int nuovo. Se la eseguo come funzione a parte (digitando 2) modifica tranquillamente il mio file b, mentre dal return (digitando 1) mi crea il file copia.

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


using namespace std;


int nuovo();
int aggiungi(); 
int modifica();


class libro
{
    public:
    string titolo="";
    int quantita;
};




int main ()
{
    int scelta;
    aggiungi();
    do
    {
        system("CLS");
        cout<<"1.Acquisto";
        cout<<"\n2.----";
        cout<<"\n3.Esci";
        cout<<"\nScegli:";
        cin>>scelta;
        
        switch(scelta)
        {
            case 1:
                nuovo();
                break;
            case 2:
                modifica();
                break;
        } system("PAUSE");
    } while(scelta!=3);
    cout<<"\n ciao \n";
    return 0;
}




int aggiungi()
{   
    
    ifstream leggi;
    leggi.open("b.txt");
    
    if(leggi==NULL)
    {
        ofstream salva;
        salva.open("b.txt", ios::app);
        
        libro a[4];
        a[0].titolo="primo";
        a[1].quantita=20;
        a[2].titolo="secondo";
        a[3].quantita=30;
        
        salva<<a[0].titolo<<endl;
        salva<<a[1].quantita<<endl;
        salva<<a[2].titolo<<endl;
        salva<<a[3].quantita<<endl;
        
        salva.close();
    } 
}




int nuovo ()
{


    
    libro a;


    ofstream salva;
    salva.open("b.txt",ios::app);
    
    string nuovo="";
    cout<<"\nInserire il nuovo titolo:";
    cin>>nuovo;
    
    bool libroSi=false; 
    ifstream leggi;
    leggi.open("b.txt");
    


    while(!leggi.eof())
    {
    
            
        leggi>>a.titolo;
        leggi>>a.quantita;
        


        if(a.titolo==nuovo)
        {
            libroSi=true; 
            
        }
    }


    leggi.close();


    if(libroSi==true)
    {
        cout<<"\nLibro gia presente\n";
        return modifica();
    } 
    else
    {
        int i;
        
        ofstream salva;
        salva.open("b.txt", ios::app);
            
    
        
            a.titolo=nuovo;
            cout<<"\nQuantita:";
            cin>>a.quantita;
            cout<<"\n----------\n";
            
            salva<<nuovo<<endl;
            salva<<a.quantita<<endl;
            
            salva.close();
            
    }
}


int modifica()
{
    libro a;
    ifstream leggi;
    leggi.open("b.txt");
    if(leggi)
    {
    string nuovo="";
    cout<<"\nInserire il titolo del libro:";
    cin>>nuovo;
    
    ofstream posizioni("posizioni.txt");
    int posizione=0;
    
    while(!leggi.eof())
    {
        leggi>>a.titolo;
        leggi>>a.quantita;
        
        posizione++;
        
        if(nuovo==a.titolo)
        {
            cout<<"\nPosizione:"<<posizione<<endl;
            cout<<"\nQuantita:"<<a.quantita<<endl;
            
            posizioni<<posizione<<endl;
        }
    }
    leggi.close();
    posizioni.close();
    
    int daMod=0;
    cout<<"\nInserire la posizione del libro da inserire:";
    cin>>daMod;
    
    ofstream copia("copia.txt");
    ifstream leggi("b.txt");
    
    for(int i=0;i<daMod-1;i++)
    {
        leggi>>a.titolo;
        leggi>>a.quantita;
        
        copia<<a.titolo<<endl;
        copia<<a.quantita<<endl;
    }
    
        leggi>>a.titolo;
        leggi>>a.quantita;
        
        int nuovaQuantita;
        cout<<"\nQuantita da aggiungere:";
        cin>>nuovaQuantita;
        
        int nuovaDisp;
        nuovaDisp=nuovaQuantita+a.quantita;
        
        a.quantita=nuovaDisp;
        
        copia<<a.titolo<<endl;
        copia<<nuovaDisp<<endl;
        
        
        while(!leggi.eof())
        {
            leggi>>a.titolo;
            
            if(a.titolo!="")
            {
                leggi>>a.quantita;
                
                copia<<a.titolo<<endl;
                copia<<a.quantita<<endl;
            }
        }
        leggi.close();
        copia.close();
    }else
    cout<<"\nFile non trovato!";
    
    remove("b.txt");
    rename("copia.txt","b.txt");
}