C++ 如何在运行时更改srand()

C++ 如何在运行时更改srand(),c++,runtime,srand,random-seed,C++,Runtime,Srand,Random Seed,我使用的是带有固定种子的srand(),我需要在一次执行中使用一组不同的种子(如100、200、300、…、1000)运行测试。这可能吗?问题是,srand()是在main的开头定义的,所以我不知道如何用变量控制seed。您可以使用srand(time(NULL)),并包含time.h头。它使用当前系统时间初始化srand()。希望能有帮助 您可以使用srand(time(NULL)),并包含time.h头。它使用当前系统时间初始化srand()。希望能有帮助 如果单元测试测试使用rand()的

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

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

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

如果单元测试测试使用rand()的代码,那么您应该调用
srand()
,作为测试设置的一部分


这样,测试的行为方式与它作为套件的一部分是否独立运行的方式相同。

如果单元测试测试使用rand()的代码,那么您应该调用
srand()
,作为测试设置的一部分


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

对于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;
}

对于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;
}

srand()可以在任何地方使用。如果你想让一个特定的测试有一个特定的种子,那么在测试之前调用srand(seed)。只要把代码放在一个for循环中,并在每个迭代的开头调用srand aht,你会问如何特别修改种子中的变量,以便它将输出100200。。。1000? 或者任何其他序列?不,我只需要修改种子的值…谢谢所有的回答,你可以在任何地方使用。如果你想让一个特定的测试有一个特定的种子,那么在测试之前调用srand(seed)。只要把代码放在一个for循环中,并在每个迭代的开头调用srand aht,你会问如何特别修改种子中的变量,以便它将输出100200。。。1000? 或者任何其他序列?不,我只需要修改种子的值…感谢所有对单元测试不太有用的回答。在运行单元测试时,您希望rand()返回相同的一组数字,因此在每个测试开始时使用srand()和一个常量值,以确保获得一致的结果。这对单元测试不是很有用。在运行单元测试时,您希望rand()返回相同的一组数字,因此在每个测试开始时使用srand()和一个常量值,以确保得到一致的结果。