随机数发生器总是选择相同的数字

时间:2014-03-07 03:10:45

标签: c++ random

我正在制作一个小型“龙与地下城”类型的程序,以帮助向我展示rand()命令。它工作得很好,除了它总是选择2.从不1.帮助?

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    cout << "welcome to T's version of dungeons and dragons! \n Scenario:";
    int Scenario1 = rand() % 2 + 1;
    if(Scenario1==1){
        cout << "you come across a sleeping traveler, Do you ignore him, or steal his loot?";
    }
    else {
        cout << "you find an old bandit hideout in a cave. Do you ignore, or enter?";
    }

}

2 个答案:

答案 0 :(得分:1)

如果不播种,

rand()每次都会产生相同的数字系列。

种子确定rand函数如何生成数字。为了更好的“随机性”,请在程序开头调用以下,例如作为main内的第一个语句:

srand(time(NULL));

这使随机数生成器具有当前UNIX时间戳的值,该时间戳应该足够独特,以保证更好的随机性错觉。

有关srand的更多信息,请访问:

http://www.cplusplus.com/reference/cstdlib/srand/

修改

正如其他人所提到的,最好使用<random>标题中的功能,因为这是一种更现代的方法,可以避免srand / rand的许多陷阱范例

答案 1 :(得分:0)

rand()将始终以相同的顺序生成数字。

要生成完全随机的数字,您可以使用srand(time(0)); time()在名为#include <ctime>

的标头文件中使用

更详细的信息,请查看:: https://www.youtube.com/watch?v=naXUIEAIt4U