从1-6中选择rand()数字

ssj*_*878 3 c++ random generator

我这里有一个简单的问题,但不知道如何解决这个问题!我正在尝试创建一个数字生成器,但我只想从1-6中选择一个随机数.没有零!这个问题被标记为dup但不应该是因为这是C++ NOT C:

srand(static_cast<unsigned int>(time(0)));
int dice = rand()%6;
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 13

rand() % 6给出范围内的数字0..5.添加一个以获得范围1..6.


Sha*_*our 9

如果C++ 11是一个选项,你也可以选择std::uniform_int_distribution更简单,更不容易出错(参见rand()Considered Harmful presentation and slides):

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::uniform_int_distribution<> dist(1, 6);

    for( int i = 0 ; i < 10; ++i )
    {
       std::cout << dist(e2) << std::endl ;
    }

    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

之前的帖子为什么人们说使用随机数生成器时存在模偏差?清楚地解释了克里斯在评论中指出的模数偏见.