所以我正在尝试写一个探路者,并且遇到了一些问题。
我目前有一个有四种情况的开关(),想要随机选择其中一种。
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);
因为它是一个'do'循环,它似乎并不真的是随机的?我得到了类似的结果。如何确保我从switch()??
获得完全随机的输出谢谢!
答案 0 :(得分:1)
time(NULL)
不需要具有优于一秒的任何分辨率。除非您的程序运行了很长时间,否则多次调用它可能会多次重复相同的值。这可以解释你的&#34;始终如一的&#34;结果。运行代码&#34;按原样#34;多次,几秒或几分钟,可能会产生不同的结果。但是,如果它快速连续运行几次,它可能会反复给出相同的值,并缓慢地改变值。
一般来说,在第一次调用srand()
之前,请在您的计划中拨打rand()
一次。
如果您正在使用C ++ 11或更高版本,那么可以使用质量更好的生成器。阅读文档。
答案 1 :(得分:0)
你在rand()之后调用了srand(),它已经使用了种子。 尝试在rand()之前调用srand(),只需要调用一次。所以,在阻止之前调用它。 此外,您可能需要查看(Random C++ Header Reference)
答案 2 :(得分:0)
尝试在执行
之前调用srand()