返回相同值 (C++) 的随机数生成器

Random number generator returning the same value (C++)

本文关键字:随机数生成器 C++ 返回      更新时间:2023-10-16

我一直在尝试为动态分配的实例数组生成一个随机数,但每次尝试时,每个实例总是被赋予完全相同的值:

//IN MAIN
Enemy* enemy;
int num;
std::cout << "How many enemies would you like there to be?" << std::endl;
std::cin >> num;
enemy = new Enemy[num];
for (int q = 0; q < num; q++)
{
    enemy[q].setAngle();
}
for (int q = 0; q < num; q++)
{
    std::cout << enemy[q].getAngle() << std::endl;
}
//IN THE ENEMY CLASS
void Enemy::setAngle()
{
    srand(time(NULL));
    angle = rand() % 360 + 1;
}
int Enemy::getAngle()
{
    return angle;
}

输出将始终是 1 到 360 之间的数字,但是当调用 getAngle() 时,输出只是在多行上重复的相同数字。为什么会这样?我做错了什么,我该如何解决?

提前致谢

每次调用 setAngle 时,您都在播种随机数生成器。如果这一切都发生在一秒钟内(这是time的分辨率),它将始终以相同的值播种,因此从相同的伪随机值开始。相反,您应该只在程序开始时调用srand一次。