如何在运行时更改srand()

时间:2012-09-04 03:20:53

标签: c++ runtime srand random-seed

我正在使用srand()使用固定种子,我需要在一次执行中使用一组不同的种子(如100,200,300,...,1000)运行测试。这可能吗?事情是srand()是在main的开头定义的,所以我不知道如何用变量控制种子。

3 个答案:

答案 0 :(得分:3)

您可以使用srand(time(NULL)),并包含time.h标头。它使用当前系统时间初始化srand()。希望能帮助到你。 !

答案 1 :(得分:0)

如果单元测试测试使用rand()的代码,那么您应该在测试设置中调用srand(<const>)

通过这种方式,测试的行为与套件的一部分独立运行的方式相同。

答案 2 :(得分:0)

对于在srand调用中使用的每个不同的种子值,可以预期伪随机数生成器在随后的rand调用中生成不同的连续结果。 使用相同种子的两个不同初始化指示伪随机生成器为后续调用rand生成相同的连续结果。

这可能说明:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
  printf ("First number: %d\n", rand() % 100);
  srand ( time(NULL) );

  printf ("Random number: %d\n", rand() % 100);
  srand ( 1 );

  printf ("Again the first number: %d\n", rand() %100);
  srand ( time(NULL) );

  printf ("Random number: %d\n", rand() % 100);

  printf ("Random number: %d\n", rand() % 100);

  printf ("Random number: %d\n", rand() % 100);

  printf ("Random number: %d\n", rand() % 100);

  return 0;
}

输出:

First number: 41
Random number: 76
Again the first number: 41
Random number: 76
Random number: 14
Random number: 74
Random number: 41
Press any key to continue