我试图从字典中选择一个随机字,而不是给我随机数字,每次运行程序时数字会逐渐增加,例如,如果我得到17010一次运行,我会得到17025左右的某个地方或所以下一次运行。
这是我的代码: 如果有帮助,词典的长度大约是44000。
//I initialize srand(time(0)) in my main function
int numRand = std::rand()%Dictionary.size();
std::string wordOne = Dictionary[numRand].getWord();
sylCount -= Dictionary[numRand].getSylls();
提前致谢!
答案 0 :(得分:2)
如果您可以使用C ++ 11,则可以使用其<random>
库。查看here以获取文档。首选mt19937
生成器 - 它是比rand()
更高质量的PRNG或类似的东西。
如果每次运行程序时都需要按顺序增加数字,则需要在程序终止时将数字保存到文件中,然后将其重新加载并在循环中执行随机数生成等到你得到一个比前一个更大的数字。 (说实话,我不太清楚为什么每次运行程序都需要增加它 - 这会破坏程序的重现能力,这会严重妨碍你执行测试的能力。)
答案 1 :(得分:1)
模数运算符(%)不是一个好主意,因为如果rand()的范围不是字典大小的倍数,它将不是随机的。
即。如果rand()的范围是0-9且字典大小为9,则输出为0的可能性是任何其他数字的两倍,因为0%9 = 0和9%9 = 0。