首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

类中产生随机数的有关问题

2013-01-23 
类中产生随机数的问题想完成的功能是,每个类对象产生时同时产生一个随机数,代码如下,但a,b,c产生的随机数

类中产生随机数的问题
想完成的功能是,每个类对象产生时同时产生一个随机数,代码如下,但a,b,c产生的随机数总是一样的,猜想是由于三个对象同时建立,时间种子一样导致的,应该通过什么办法解决。。。
class x
{
public:
x()
{
srand((unsigned int) time(0) );
int x=rand()%100+1;
printf("%d\n",x);
}


};
int _tmain(int argc, _TCHAR* argv[])
{
x a,b,c;
return 0;
}
[解决办法]
随机种子只需要初始化一次。
你每次调用x(),都会执行srand((unsigned int) time(0) );

最好把它换个地方。
[解决办法]
在主函数中调用srand((unsigned int) time(0) );就可以了,没必要在构造函数中调用。

关于随机数,楼主还可以参考下《STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数》
http://blog.csdn.net/morewindows/article/details/7659532
[解决办法]



unsigned int RAND(void) {
    static bool stb_sranded = false;
    if(!stb_sranded) {
        stb_sranded = true;
        time_t now;
        srand((unsigned int) time(&now));
    }
    return rand();
}

class x
{
public:
x()
{
//srand((unsigned int) time(0) );
int x=RAND()%100+1;
printf("%d\n",x);
}


};
int _tmain(int argc, _TCHAR* argv[])
{
x a,b,c;
return 0;
}

[解决办法]
随机种子只应该被设置一次,你可以在类里面加一个静态变量,初始值为0 如果随机种子被设置过,则修改为1

只有当变量取值为0则才修改随机种子

热点排行