使用 rand() 和 srand() 有问题

Having issues with rand() and srand()

本文关键字:有问题 srand 使用 rand      更新时间:2023-10-16

所以我正在尝试编写一个探路者,但遇到了一些问题。

我目前有一个包含四种情况的 switch((,并希望随机选择其中一种。

do
{
if (checkLeft()==false && checkRight()==false && checkUp()==false && checkDown()==false)
{
cont = false;
}
int x = rand() % 4;
srand( static_cast<unsigned int>(time(NULL)));
if (cont == true)
{
switch(x)
{
case 0:
checkRight();
break;
case 1:
checkDown();
break;
case 2:
checkUp();
break;
case 3:
checkLeft();
break;
}
}
} while (currentx != max && currenty != max && cont == true);

因为它是一个"做"循环,所以它似乎不是真的随机的?我得到一致的相似结果。如何确保我从 switch(( 获得完全随机的输出?

谢谢!

time(NULL)

不需要任何分辨率优于一秒。 多次调用它可能会多次重新设定为完全相同的值,除非程序运行了相当长的持续时间。 这可以解释你"一贯相似"的结果。 多次"按原样"运行代码,相隔几秒钟或几分钟,可能会产生不同的结果。 但是,如果它快速连续运行几次,它可能会重复给出相同的值,并且缓慢地更改值。

一般来说,在第一次调用rand()之前,在程序中只调用srand()一次。

如果您使用的是 C++11 或更高版本,则可以使用质量更好的发生器。 阅读文档。

你在 rand(( 之后调用 srand ((,它已经使用了种子。 尝试在 rand(( 之前调用 srand((,它只需要调用一次。因此,在阻止之前调用它。 另外,您可能想查看(随机C++标头引用(

尝试在 do 之前调用 srand((