/StackOverflow上回答以及许多其他'教程'等。C++ 11梅森难题产生相同的值每次
尽管下面,我所知道的,我的代码生成每一次我运行相同的“随机”号的所有建议。它看起来并不像我在做什么不同于我应该做的事情。为什么这不起作用?在代码/
#include <random>
#include <iostream>
using namespace std;
random_device rd; // used to initialise (seed) engine
mt19937 mt(rd()); // random-number engine used (Mersenne-Twister in this case)
uniform_int_distribution<int> dist(1, 4); // guaranteed unbiased
后来在一个函数中:
for (it : vec_one) {
int rand_int = dist(mt); // Generate Random Number
switch (rand_int)
{
case 1:
cout << "One!" << endl;
case 2:
cout << "Two!" << endl;
case 3:
cout << "Three!" << endl;
case 4:
cout << "Four!" << endl;
default:
break;
}
}
从评论 switch语句中缺少休息答案。这真的很简单。发电机正常工作。我忘记把它们包括在我过于乐观的状态中,感觉很愚蠢。 但是... 的是跳过这个问题上的亮点是多么容易做到的意见和答案的数量。我觉得略少愚蠢现在......
工作得很好,我见[这里](http://coliru.stacked-crooked.com/a/61540450cafd9f1b)的活生生的例子,不知道自己在做什么。你能发布一个最小的可编译示例吗?顺便说一下,你在'case'语句中没有'break',所以你将会遇到case开关,最终你会得到'One!二!三!作为展示的四个! – vsoftco
你确定这是MSVC,而不是MinGW或什么?最后我知道,libstdC++的Windows实现不会使'random_device'不确定(从标准的角度来看,这仍然是完全合法的)。 – chris
在你的系统上'cout << rd.entropy()'的结果是什么?另见http://www.cplusplus.com/reference/random/random_device/。如果你的系统没有一个实际的非确定性随机数发生器,你不会期望每次看到不同的序列(而'entropy()'理论上将返回0),并且应该使用[mt19937]构造函数一个实际的种子,而不是](http://www.cplusplus.com/reference/random/mersenne_twister_engine/mersenne_twister_engine/)(另请参阅这里的例子)。 –