【发布时间】:2014-02-22 13:56:10
【问题描述】:
我一直在尝试为动态分配的实例数组生成一个随机数,但每次我尝试时,每个实例总是被赋予完全相同的值:
//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() 时,输出只是在多行上重复的相同数字。为什么会这样?我做错了什么,我该如何解决?
提前致谢
【问题讨论】:
-
每次得到随机数时尽量不要重新初始化种子。如果你在很短的时间内多次初始化种子,你可能会得到相同的种子,然后得到相同的数字
-
我认为
time的分辨率是 1 秒,因此您每次调用该函数时都可能使用相同的值进行初始化(参见上面的注释)。
标签: c++ class random dynamic-memory-allocation