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(); }


Rispondi quotando

