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;
}