salve a tutti, sono nuovo avevo già cercato aiuto in altri forum ma con pochi risultati, ho un programmino per salvare varie password, ho un problema nella fase di modifica (funzione void modifica() ) dei record..invece di modificarli mene crea un'altro.....grazie in anticipo allego il sorgente

codice:
#include<iostream>#include<fstream>
#include<string.h>
#include <stdio.h>
using namespace std;
int indice();
void modifica();
void lista();
void inserisci();
void cerca();
//string scrivi();
struct account{
	int indice;
	char nsito[50];
	char nutente[20];
	char psw[30];
};
struct account nuovo;
ofstream of;
	ifstream ifs;
	char menu;
int main () {
	int ctrl,scelta,ctrl2;
	char sbagliato, mod;
	string psw;
	sbagliato:
	cout<<"inserisci la password:";            // psw per acceddere al programma
	cin>>psw;    
	if(psw!="password"){
		cout<<"password sbagliata!!!!!! riprovare"<<endl;
		goto sbagliato;
	}
	menu:
	system("cls");                                                            //menu
		cout<<"benvenuto in gestione psw, cosa vuoi fare?\n";
		cout<<" 1) visualizzare| modificare gli account in memoria \n";
		cout<<" 2) aggiungere un nuovo account\n";
		cout<<" 3) uscire \n";
		cout<<" digitare 1 2 o 3 e premere invio! :";
		cin>> scelta;
		if (scelta==1) {
			
		lista();
		cout<<"vuoi modificare/cercare un account?(s=modifica/c=cerca/n=menu/x=uscita)"<<endl;
		cin>>mod;
		if(mod=='s'){
		modifica();
		cout<<"premere 1 per tornare al menu o premere 0 per uscire";
		cin>>ctrl2;
		if(ctrl2==1) goto menu;
		else return 0;
		
		}else if(mod=='n'){
		goto menu;
		}else if(mod=='x'){
		return 0;
		}else if(mod=='c'){		
			cerca();
	}
		
					   }else if (scelta==2){
					   
	
do{


			  nuovo.indice=indice();
				cout<<"inserisci nome del sito(senza spazi): ";
				cin>>nuovo.nsito;
				cout<<"\n inserisci nome utente: ";
				cin>>nuovo.nutente;
				cout<<"\n inserisci la password del sito: ";
				cin>>nuovo.psw;	
				ofstream of("pswww.txt", ios::app| ios::out | ios::binary);
				of.write((char *) &nuovo, sizeof(struct account));
				
				cout<<"\n inserire un altro account?(1=si/2=no(torna al menu)):";
				cin>>ctrl;
				}while(ctrl!=2);
				of.close();
				goto menu;
			}
				
					
return 0;	


}
int indice(){   
	int a;
	ifstream ifs("pswww.txt", ios::in | ios::binary);
				
				while(ifs.read((char *) &nuovo, sizeof(struct account))){
	
	a=nuovo.indice+1;
	
}
if(a<1 ) a=1;
return a;
}


void modifica(){   
	int temp,unodue;
	char temputente[20];                 
	
	
		cout<<"digitare l'indice dell'account da modificare"<<endl;
	cin>>temp;
		system("cls");
		fstream ifs("pswww.txt", ios::in | ios::out | ios::binary);
	
		
				
				
				while(ifs.read((char *) &nuovo, sizeof(struct account))){              // qui c'è il problema  da qualche parte:(
					
					if(temp==nuovo.indice){
					
					cout<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw;
					cout<<"cosa vuoi modificare?(1: nomeutente, 2: password)";
					cin>>unodue;
					if(unodue==1){
						cout<<"inserisci un nuovo nutente: ";
						cin>>nuovo.nutente;
					}
					if(unodue==2){
						cout<<"inserisci la nuova password:";
						cin>>nuovo.psw;	
					}
				   ifs.write((char *) &nuovo, sizeof(struct account));
					break;
					}
}
ifs.close();
cout<<"modifica effettuata!"<<endl;
}
void lista(){  // visualizzo lista
	ifstream ifs("pswww.txt", ios::in | ios::binary);
				
				while(ifs.read((char *) &nuovo, sizeof(struct account))){
					
					cout<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw<<endl;
				}
				ifs.close();
	
	
}
void cerca(){
	char sito[50];
	int i;
	char * pch;
					cout<<"inserisci in nome del sito da cercare:"<<endl;
					cin>>sito;
		ifstream ifs("pswww.txt", ios::in | ios::binary);
				
				while(ifs.read((char *) &nuovo, sizeof(struct account))){
					
					
					while((pch=strstr(nuovo.nsito,sito))!=NULL){ //strstr(x,y) cerca y in x se la trova punta alla prima corrispendenza, altrimenti il puntatore a valore null
						cout<<"trovato: "<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw<<endl;
						break;
					}
					
					
				}
				ifs.close();
}