作为参考,我遵循了thread。
我从main()
函数调用此函数,该函数返回范围[0, N]
中的随机值:
int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; }
例如:
int main()
{
unsigned int r=128;
while(r--)
{
int a = randr(0, 63);
int b = randr(64, 127);
printf("%d %d\n", a, b);
}
return 0;
}
问题是,每次执行程序时,变量a
和b
总是包含相同的生成值,为什么(我的意思是printf始终是终端上的相同数据)?
答案 0 :(得分:4)
来自rand
的手册页:
rand()
函数返回0到RAND_MAX
范围内的伪随机整数 包容性(即数学范围[0, RAND_MAX]
)。
srand()
函数将其参数设置为新序列的种子rand()
返回的伪随机整数。这些序列是可重复的 使用相同的种子值调用srand()
。如果未提供种子值,则
rand()
功能会自动播种 值为1。
最后一句话特别相关。使用相同的种子,您将始终获得相同的伪随机数序列。由于您未明确使用srand()
,因此您的种子始终为1。
答案 1 :(得分:2)
试着看看C ++的srand。
答案 2 :(得分:1)
你必须每次都用不同的东西播种随机序列。
最常见的是srand((unsigned)time(NULL));
。
答案 3 :(得分:0)
只要种子是相同的rand就会产生相同的序列。