我有以下代码:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
cout << rand()%30<< endl;
return 0;
}
我运行此代码并始终获得11.如果您知道,请解释原因。我使用最新的代码块和c ++
答案 0 :(得分:2)
rand()
函数不会生成真正的随机数;它实际上会返回从0
到RAND_MAX
的值序列中的下一个pseudo-random值。您可以使用srand()
更改该序列中的起点。
一种常见的技巧是initialise srand()
using the current time使用time()
函数,as shown below:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand(time(NULL));
printf("%d", rand());
return 0;
}
这导致程序在每次运行时开始从序列中的不同点生成数字,使其看起来不太可预测。
答案 1 :(得分:1)
要初始化随机数生成器,您需要使用种子调用srand()
。
您只需要初始化once。
你将使用相同的种子得到相同的数字序列,所以通常,人们使用当前时间作为种子,因为几乎可以保证在程序执行之间改变:
srand(time(0));
答案 2 :(得分:0)
rand()
是一个较旧的随机数生成器,继承自C. C ++有更好的RNG可用。如果您不想担心细节,请使用std::default_random_engine
。
此外,%30
会减少随机性。你可能想要std::uniform_int_distribution<int>(0,30)
那里。
答案 3 :(得分:-1)
为了使用随机数生成器在每次调用时设置不同的数字,你一定要使用time.h. 在下面包含time.h然后像这样使用;
srand(time(NULL));
printf("%d", rand());