使用 rand() 和 srand() 有问题
Having issues with rand() and srand()
所以我正在尝试编写一个探路者,但遇到了一些问题。
我目前有一个包含四种情况的 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((
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 我在范围内未声明的错误类有问题
- 我的C++语言蛮力算法有问题
- 我关于函数"Assert"的C++代码有问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++类中的友元函数有问题?
- 我对数组即 0x6dfe78 有问题
- 我对 std::unique(算法)C++有问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 这个模板为什么有问题?如何正确编译
- 我对 MyGraph 属性顶点名称和边权重有问题
- delete[]有问题,如何部分删除内存
- 在C++中使用exit()退出程序有问题吗
- 跳转到if(false)块有问题吗
- 查找有问题的宏
- 使用 rand() 和 srand() 有问题
- C++ 回文程序总是给出 0(假)作为输出问题;我的代码哪里有问题?
- 我在 C++ "out_of_range at memory location"有问题
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 标头中的模板规范有问题