考虑以下代码:
#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个不同的随机数。
答案 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);
}
}