如何在一个运行时生成不同的随机数?

时间:2013-02-10 06:08:17

标签: c random srand

考虑以下代码:

#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个不同的随机数。

3 个答案:

答案 0 :(得分:6)

将呼叫转移到srand(time(NULL));for循环之前。

问题是time()每秒只更改一次,但是你生成了10个数字,除非你的极其慢CPU,否则它不需要一秒钟生成那10个随机数。

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

答案 1 :(得分: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);
    }
}

答案 2 :(得分: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);
    }
}