C++ 自定义rand()函数返回相同的值
作为参考,我遵循了这一点 我从C++ 自定义rand()函数返回相同的值,c++,c,random,C++,C,Random,作为参考,我遵循了这一点 我从main()函数调用此函数,该函数返回范围[0,N]内的随机值: int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; } 例如: 问题是,每次执行程序时,变量a和b总是包含相同的生成值,为什么(我的意思是它总是在终端上打印相同的数据) 试着看一下C++。只要种子是相同的,rand将生成相同的序列。来自rand的手册页: rand()函数返回介于0到rand\u MA
main()
函数调用此函数,该函数返回范围[0,N]
内的随机值:
int randr(int min, int max) { int r = (rand() % (max+1-min)+min); return r; }
例如:
问题是,每次执行程序时,变量
a
和b
总是包含相同的生成值,为什么(我的意思是它总是在终端上打印相同的数据) 试着看一下C++。只要种子是相同的,rand将生成相同的序列。来自rand
的手册页:
rand()
函数返回介于0到rand\u MAX
包括在内(即数学范围[0,RAND_MAX]
)
srand()
函数将其参数设置为新序列的种子
rand()
返回的伪随机整数。这些序列可由计算机重复
使用相同的种子值调用srand()
如果未提供种子值,rand()
函数将自动使用
值为1
最后一句话特别相关。使用相同的种子,您将始终获得相同的伪随机数序列。由于您没有显式地使用
srand()
,因此种子始终为1。每次都必须使用不同的东西为随机序列种子
最常见的是
srand((无符号)时间(NULL))代码>任何C随机数教程都会给出答案。在使用rand()之前,您需要设置随机种子。的可能重复项没有看到这一点,顺便说一句,它使这个问题成为一个难题。
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;
}