假设有一个循环,其含义是一次调用该函数20次srand
。由于srand
它使用当前时间来生成数字,因此通过以超过一秒的速度执行循环,我在输出中得到 20 个相同的数字。代码示例:
// Example program
#include <iostream>
#include <stdlib.h> //srand
#include <time.h>
using namespace std;
int random_11()
{
srand(time(NULL)); //Вызываем функцию рандома. Описание функции по ссылке: http://www.cplusplus.com/reference/cstdlib/rand/
int random_num = rand() % 100; // Генерируем число в пределах 100
return random_num;
}
int main()
{
int ar[20];
int n;
for (int i = 0; i < 20; i++)
{
n = random_11(); // Вызываем функцию для генерации случайного числа
ar[i] = n;
cout << ar[i] << '\n';
}
}
在输出中,我们将获得 20 个在给定秒内生成的相同值。如果我们将 20 的值更改为 200,000,那么我们将在几秒钟内生成几个不同的数字。
问题的实质:如何实现不绑定时间的随机数的生成?
伙计们,我为我的呆滞症和对手册的阅读不佳表示歉意。在 Vladimir Martyanov 的建议下,我将其srand(time(NULL))
移至 main。
// Example program
#include <iostream>
#include <stdlib.h> //srand
#include <sys/time.h>
using namespace std;
int random_11()
{
int random_num = rand() % 100;
return random_num;
}
int main()
{
srand(time(NULL));
int ar[20];
int n;
for (int i = 0; i < 20; i++)
{
n = random_11();
ar[i] = n;
cout << ar[i] << '\n';
}
}
请理解、原谅并...
srand() 应该使用一次,而不是循环使用。要从时间解除绑定,请将非时间参数传递给此函数。
永远,永远,永远不要
srand()
在每个之前使用rand()
。rand()
每次他基本上调用,srand()
用下一个伪随机值初始化生成器,而你正在干扰它的工作!调用它一次
srand()
就足够了,然后只让不同的程序启动使用不同的值序列。PS当你去某个地方时,你不会开始指挥每一块肌肉——你会收缩,你会放松吗?在这里,您对生成器的要求大致相同-我更聪明,您生成我所说的。好吧,如果它更聪明 - 自己生成它,不要使用
rand()
......