类中产生随机数的问题
想完成的功能是,每个类对象产生时同时产生一个随机数,代码如下,但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则才修改随机种子