Salve a tutti.
Sto creando un programma in C++ per la generazione di password che utilizza due classi ed un menù. Quando inserisco il numero 5, per generare la password, la funzione della classe adibita a tale operazione non viene chiamata.
Infatti, inserendo un banale messaggio in output non viene visualizzato.
Ecco i frammenti relativi:
Menù:
codice:
void Password::menu()
{
while (true){
cout << "Quale opzione desidera?" << endl;
cout << "1. Ottieni lunghezza password" << endl
<< "2. Caratteri da utilizzare" << endl
<< "3. Mostra seme password" << endl
<< "4. Inserisci lunghezza."<< endl
<< "5. Genera" << endl
<< "6. Esci" << endl;
int scelta;
cin >> scelta;
switch (scelta)
{
case 1: cout << "Lunghezza password: "<<getLength() << endl; break;
case 3: cout << "Stringa sorgente: "<<getSource()<<endl; break;
case 6: exit(0); break;
case 5: generate(); break;
case 2: componiSource(); break;
case 4: cin >> length; break;
default: cout << "Menù inesistente!" << endl;
}
}
}
generate()
codice:
void Password::generate()
{
MPWD * mypwd = new MPWD;
mypwd->setLength(length);
mypwd->genSource(&sourcePassword);
cout << "Password generata: " << mypwd->getPassword() << endl;
delete mypwd;
}
classe MPWD
codice:
#include "makepwd.h"
#include <string>
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
void MPWD::setLength(int _length)
{
length = (_length > 0 ? _length : -1);
if (length == -1)
cout << "ERRORE: la lunghezza deve essere maggiore di 1!" << endl;
exit(0);
}
string MPWD::getPassword()
{
return password;
}
void MPWD::genSource(const string *sourcePtr)
{
if (sourcePtr->length() <= 0)
{
cout << "ERRORE: sorgente invalido. " << endl;
exit(0);
}
//generazione carattere random
for (int i = 0; i < length; i++)
{
srand(time(0));
for (int j = 0; j < length*(rand()%1000); j++);
password += sourcePtr[rand() % sourcePtr->length()];
}
}
Il problema deve essere limitato a quella funzione, perché setLength funziona tranquillamente.
Chiaramente ogni suggerimento è ben accetto.
Saluti.