Vi allego il codice, (tralasciate i goto e il fatto che sia tutto globale messo solo per risparmiare un po di tempo poi sistemerò), funziona la parte di aggiungere account in lista e il di visualizzali ma non riesco a modificarli, ci sarà qualche errore nel codice o qualcosa che manca, grazie in anticipo
#include<iostream>
#include<fstream>
#include<string.h>
#include <stdio.h>
using namespace std;
int indice();
void modifica();
void lista();
void inserisci();
struct account{
int indice;
char nsito[50];
char nutente[20];
char psw[30];
};
struct account nuovo;
ofstream of;
ifstream ifs;
int main () {
int ctrl,scelta;
char sbagliato, menu, 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 un account?(s=modifica/n=menu)"<<endl;
cin>>mod;
if(mod=='s')
modifica();
else if(mod=='n')
goto menu;
}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=menu):";
cin>>ctrl;
}while(ctrl!=2);
of.close();
goto menu;
}
return 0;
}
int indice(){ // assegno un idice il primo non riesco a farlo uscire con 1 il resto va bene, quindi in caso forzo il primo e il resto li prende bene
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(){ // qui c'è il problema da qualche parte, o manca un pezzo di codice anche se a me sembra giusto
int tempindice, scelta;
cout<<"digitare l'indice dell'account da modificare"<<endl;
cin>>tempindice;
ifstream ifs("pswww.txt", ios::in | ios::binary);
ofstream of("pswww.txt", ios::out | ios::binary);
while(ifs.read((char *) &nuovo, sizeof(struct account)))
if(tempindice==nuovo.indice){
cout<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw<<endl;
cout<<"cosa vuoi modificare?(1=nome sito, 2=nome utente, 3=password)"<<endl;
cin>>scelta;
if(scelta==1){
cout<<"nuovo nome sito : ";
cin>>nuovo.nsito;
}else if(scelta==2){
cout<<"nuovo nome utente : ";
cin>>nuovo.nutente;
}else if(scelta==3){
cout<<"nuova password: ";
cin>>nuovo.psw;
}
of.write((char *) &nuovo, sizeof(struct account));
}
ifs.close();
of.close();
}
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();
}