使用随机数生成器的麻烦

时间:2015-02-18 23:22:28

标签: c++ random srand

我有一个代表支票帐户的类,在支票帐户中有一个代表帐号的类成员。此帐号在构造函数中初始化(显然是随机数),用于几个不同的对象。我很难为每个对象获取不同的数字。主要是因为我刚刚开始使用C ++,我通过SO在这里看到的几个帖子实现了这个RNG的想法。

这是我的构造函数:

CheckingAccount::CheckingAccount(const Customer& owner): Account(owner){
    srand ( time(NULL) );
    int acctStartNum = 9;
    int firstDigit = rand() % 10;
    int secondDigit = rand() % 10;
    int thirdDigit = rand() % 10;
    int fourthDigit = rand() % 10;

     ostringstream oss;
     oss << acctStartNum << firstDigit << secondDigit << thirdDigit << fourthDigit;
    accountNumber = stoi(oss.str());

}

我理解srand()种子随机数,每次都能提供很好的价值分布。但是当我从代码中排除它时,每个对象都有不同的accountNumber。但问题是,每次运行我的程序时,值都不会改变(即它只为每个对象生成一次随机值,然后保留这些值),这就是我实现srand()的原因,但现在所有对象都有完全相同的accountNumber,每次运行程序时都会更改它们。这是什么交易?在我实现srand()并且从不改变之前,为什么它们都是不同的,但现在它们会改变但适用于所有对象?另外,作为旁注,我知道这可能看起来很草率,但是这是指导我在构造函数中执行此操作的赋值,否则我会创建一个函数。

1 个答案:

答案 0 :(得分:0)

srand只应在生成任何随机数之前调用一次。它不应再被调用。否则,您的号码将不会像您希望的那样随机。