为什么我要生成随机数时,这段代码总是生成零?我该如何解决这个问题?

Why does this code always generate zero when I want to generate random numbers? How can I fix the problem?

#include <iostream>
#include<stdio.h> 
#include<stdlib.h> 
#include<time.h> 
 
using namespace std;
 
class mRND
{
    public:
        void seed()
        {
            srand(time(0)); 
            _seed = rand();
        }
 
    protected:
        mRND() : _seed(), _a(), _c(), _m(2147483648)
        {
        }
        int rnd()
        {
            return (_seed = (_a * _seed + _c) % _m);
        }
 
        int _a, _c;
        unsigned int _m, _seed;
};

int main() {
    mRND r;
    for(int i=0;i<100;i++)
    cout<< r.rnd()<<endl;
    
    return 0;  
}

尝试将时间设置为“NULL”而不是零。在这种情况下,零可能意味着 1970 年 1 月 1 日午夜。如果是这种情况,您将继续获得与该时间发生的随机种子。

您的问题在这里:

return (_seed = (_a * _seed + _c) % _m);

_a 为 0,因此返回值为 0,并且永远不会更改(因为 _a 始终为 0)。