Ciao Oregon, alla fine il programma parte tranquillamente, scrivendo nel seguente modo, solo che non c'è quasi nessuna differenza sostanziale al primo codice. Sai per caso il motivo? Forse è qualcosa che non riesco a vedere io!
Ti scrivo solo l'int modifica(), perchè è l'unica che ho modificato!

codice:
{
	libro a;
	ifstream leggi;
	leggi.open("b.txt");
	
	ofstream posizioni("posizioni.txt");
	int posizione=0;
	
	string titoloCercato="";
	cout<<"\nTitolo:";
	cin>>titoloCercato;
	
	while(!leggi.eof())
	{
		leggi>>a.titolo;
		leggi>>a.quantita;
		
		posizione++;
		
		if(a.titolo==titoloCercato)
		{
			cout<<"\nposizione"<<posizione<<endl;
			
			posizioni<<posizione<<endl;
		}
	}
	leggi.close();
	posizioni.close();
	
	int modificare=0;                
	cout<<"\n posizione da modificare:";
	cin>>modificare;
	
	ofstream copia("copia.txt");
	leggi.open("b.txt");          
	
	
	for(int i=0; i<modificare-1;i++)
	{
		leggi>>a.titolo;
		leggi>>a.quantita;
		
		copia<<a.titolo<<endl;
		copia<<a.quantita<<endl;
	}
	
		leggi>>a.titolo;
		leggi>>a.quantita;
		
		int nuovo;
		cout<<"\nQuantita da aggiungere:";
		cin>>nuovo;
		
		int pezzi=0;
		pezzi=nuovo+a.quantita;
		
		copia<<a.titolo<<endl;
		copia<<pezzi<<endl;
		
		while(!leggi.eof())
		{
			libro a;
			leggi>>a.titolo;
			
			if(a.titolo!="")
			{
				leggi>>a.quantita;
				
				copia<<a.titolo<<endl;
				copia<<a.quantita<<endl;
			}
		}
		
		leggi.close();
		copia.close();
		
		remove("b.txt");
		rename("copia.txt","b.txt");
	
}