При генерации некоторые значения повторяются
Я написал функцию для генерации строки из рандомных символов
std::string gen()
{
std::string all = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int allLen = all.size();
std::string symbols;
srand(time(0));
for (int i = 0;i < 10;i++)
{
symbols += all[rand() % allLen];
}
std::cout << "GEN:\t" << symbols << std::endl;
return symbols;
}
Но на выходе я получаю
GEN: Be3y2AiFa7
GEN: E1faOVvYuT
GEN: E1faOVvYuT
GEN: E1faOVvYuT
GEN: E1faOVvYuT
GEN: E1faOVvYuT
GEN: HNnhlq7KiJ
А мне нужно что бы каждый раз выдавало рандомное значение, как я могу это сделать?
Ответы (1 шт):
Функция srand задает начальное значение seed для алгоритма генератора псевдослучайных чисел.
Если ей на вход подавать одно и тоже значение, то последовательность чисел, выдаваемых функцией rand так же будет одинаковая.
В данном случае в качестве инициализации используется текущая временная метка(time(0))
Ошибка состоит в том, что функция srand вызывается многократно(при каждом вызове gen)
Тем самым если вызывать функцию gen в цикле, то значение time(0) не будет успевать меняться и генератор чисел будет сбрасываться на одну и туже последовательность.
Решение: функцию srand нужно вызывать только один раз при старте программы.