c ++ random不起作用(总是返回相同的值)

时间:2015-02-22 08:38:48

标签: c++

我有以下代码:

#include <cstdlib>
#include <iostream>


using namespace std;

int main()
{
    cout << rand()%30<< endl;
    return 0;
}

我运行此代码并始终获得11.如果您知道,请解释原因。我使用最新的代码块和c ++

4 个答案:

答案 0 :(得分:2)

rand()函数不会生成真正的随机数;它实际上会返回从0RAND_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());