Я пытаюсь создать генератор случайных паролей. Когда я вызываю функцию несколько раз, она возвращает одно и то же значение символа. QQpQ;7Q7pQ;p
Я пробовал добавить srand(time(0));
или srand((unsigned int) time(NULL));
в свою основную функцию.
Глядя на другие сообщения stack overflow, я вижу, что srand помогает создавать разных персонажей каждый раз, когда я запускаю программу. Однако он по-прежнему возвращает несколько одинаковых символов.
Как изменить начальное значение srand () во время выполнения, чтобы получать разные случайные числа?
#include <string>
#include <iostream>
#include <time.h>
using namespace std;
string randomGenerator(int numberOfCharacters);
char randomCapitalCharacter();
char randomLowerCharacter();
char randomSpecialCharacter();
char randomInt();
int main(){
srand((unsigned int) time(NULL));
int passwordLength = 12;
string password = randomGenerator(passwordLength);
cout << password << endl;
return 0;
}
string randomGenerator(int numberOfCharacters){
char randomCharacterTypes[4] = {randomLowerCharacter(),randomInt(), randomCapitalCharacter(), randomSpecialCharacter()};
std::string password;
while (numberOfCharacters > 0){
int random = rand()%4;
password += randomCharacterTypes[random];
numberOfCharacters--;
}
return password;
}
char randomInt(){
std::string numberAsString = to_string(std::rand()% 10);
char randomNumberChar = numberAsString.at(0);
return randomNumberChar;
}
char randomLowerCharacter(){
return 97 + rand()%26; //97 = a
}
char randomCapitalCharacter(){
return 65 + rand()%26; //65 = A
}
char randomSpecialCharacter(){
/** Special characters are split by numbers so we pick a random from one of the 2 groups.*/
return (rand()%2) ? char(33 + rand()%14) : char(58 + rand()%8);
}
randomCharacterTypes[4]
содержит только 4 разных символа, вы хотели создать массив указателей на функции? - person Alan Birtles   schedule 13.04.2021RReR>>eReR6e
, а второй раз -g>g>7gTgg>>T
. Это потому, что вы запускаете его более одного раза за одну и ту же секунду? Это даст те же значения, потому что time (NULL) возвращает целое число секунд, поэтому, если вы запустите его более одного раза в один и тот же второй раз (NULL), вернет то же значение. - person Jerry Jeremiah   schedule 13.04.2021int random = rand()%4;
, чтобы вызвать правильную функцию и получить символ. Сейчас вы вызываете каждую функцию только один раз и сохраняете результат вrandomCharacterTypes
. Похоже, вы надеетесь, что каждый раз вызываете функцию, но это не так, и переключение может иметь больше смысла, чем попытки объяснить, как работают указатели на функции. - person Retired Ninja   schedule 13.04.2021//97 = a
, если вы напишете'a'
вместо97
в коде (и аналогично для других символов). - person molbdnilo   schedule 13.04.2021