0

考虑这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
  int ctr;
  for(ctr=0;ctr<=10;ctr++)
    {
      int iSecret;
      srand ( time(NULL) );
      printf("%d\n",iSecret = rand() % 1000 + 1);
    }
}

它输出:256 256 256 256 256 256 256 256 256 256

不幸的是,我希望输出在该循环中打印 10 个不同的随机数。

4

3 回答 3

6

将调用移动到循环srand(time(NULL));之前。for

问题是time()每秒只更改一次,但是您正在生成 10 个数字,除非您的CPU非常慢,否则生成这 10 个随机数不需要一秒钟。

因此,您每次都使用相同的值重新播种生成器,使其返回相同的数字。

于 2013-02-10T06:10:45.863 回答
1

放在srand ( time(NULL) );循环之前。您的循环可能会在一秒钟内运行,因此您正在使用相同的值重新初始化种子。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
  int ctr;
  srand ( time(NULL) );
  for(ctr=0;ctr<=10;ctr++)
    {
      int iSecret;
      printf("%d\n",iSecret = rand() % 1000 + 1);
    }
}
于 2013-02-10T06:12:05.780 回答
0

将 srand(time(0)) 保持在 for 循环之外。它不应该在那个循环内。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
  int ctr;
  srand ( time(NULL) );
  for(ctr=0;ctr<=10;ctr++)
    {
      int iSecret;
      printf("%d\n",iSecret = rand() % 1000 + 1);
    }
}
于 2014-08-23T15:08:24.957 回答