Cześć,
Jestem zielona w programowaniu,
mam napisać pseudolosowy generator haseł (co najmniej: 1 wielka litera, 1 cyfra, 1 znak specjalny; spółgłoski i samogłoski nie mogą sąsiadować ze sobą).
Napisałam program, ale hasło nie zawsze spełnia powyższy warunek (tzn. czasem nie ma cyfry lub znaku).
Nie potrafię znaleźć błędu/błędów. Wydaje mi się, że jest on w pętli.
Proszę o pomoc :)
Kod:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cctype>
using namespace std;
int losuj( int a, int b)
{
return a+rand()%(b-a); // funkcja losujaca
}
string sam = "aeiouy"; //deklaracja znaków do hasla
string spol = "bcdfghjklmnpqrstvwxz";
string spec = "!@#$%^&*()_+";
string li = "1234567890";
int main()
{
int i;
int n;
int x;
int m;
int h;
int p;
int lp;
int licznik;
char znak;
srand(time(0));
bool f=true;
cout << "Program generujacy n-literowe haslo.\n" << endl;
cout << "Ile liter ma miec twoje haslo? (co najmniej 3).\n" << endl;
cin >> n; //dlugosc hasla
char haslo[n];
if (n<3)
{
cout << "Haslo jest zbyt krotkie" << endl;
}
else
{
for (i=0; i<n; i++)
{
haslo[i] = (f)?spol[losuj(0, spol.length())]:sam[losuj(0, sam.length())]; //zapelniam haslo naprzemiennie samogloskami i spolgloskami ( takie samego typu 2 nie moga byc obok siebie
f=!f;
cout << haslo[i] << endl;
}
lp = rand () % (n-2)+1;
for(i=0; i<lp; i++)
{
m = rand()%(n-1)+1; //losuje cyfry
haslo[m] = li[losuj(0, li.length())];
p = rand()%(n-1)+1;
/*cout << "lp= " << lp << endl; // probowalam znalezc, w ktorym etapie jest blad
cout << "i= " << i << endl;
cout << "m= " << m << endl;
cout << "p= " << p << endl;*/
if (m==p)
{
do
{
p = rand()%(n-1)+1; //losujowanie dla znakow specjalnych
cout << "kolejne p= " << p << endl;
}
while(m=!p);
haslo[p] = spec[losuj(0, spec.length())];
}
else
{
haslo[p] = spec[losuj(0, spec.length())];
}
}
licznik=0;
for(i=0; i<n; i++)
{
if (isalpha(haslo[i]))
{
if (licznik==0) //zwiekszam niektore litery (co najmniej jedna ma byc wielka)
haslo[i]=toupper(haslo[i]);
licznik=1;
}
}
cout << n << "-znakowe haslo to: ";
for(i=0; i<n; i++)
{
cout << haslo[i];
}
}
}
- main.cpp (3 KB) - ściągnięć: 263