C++获取随机数的问题为了给一个两人一组的比赛分组写了一个Person类,我的思路是这样的:Person类里面有一个
C++获取随机数的问题
为了给一个两人一组的比赛分组写了一个Person类,我的思路是这样的:
Person类里面有一个getRandomNumber函数来获取一个随机数,假设只有10个人,就先预定10个位置来让10个Person的实例去插空,每插一次都要和之前的已经插入的Person比较,如果有相同,则再执行一次这个Person的getRandomNumber函数,否则就可以插入。
- C/C++ code
class Person{public: int getNumber(); int getRandomNumber(); //返回一个随机数 //其它省略private: char *name; int number; };int Person::getRandomNumber(){ srand((unsigned)time(NULL)); number = rand(); return number;}int main(){ Person person[10]; for (int i=0; i<10; ++i) { //让每个person都获取一个随机数 person[i].getRandomNumber(); } for (int j=0; j<10; ++j) { cout << person[j].getNumber() << endl; //但是打印出来后每个成员的number值都是一样的! }}在运行的时候,我用一个输出函数测试发现每个成员得到的随机数都是一样的!
可是我加一个断点调试运行的时候,它们得到的数又不一样了~
请教下各位高手,这个问题该如何解决啊?
[解决办法]
int Person::getRandomNumber()
{
number = rand();
return number;
}
int main()
{
Person person[10];
for (int i=0; i<10; ++i)
{
srand((unsigned)time(NULL) + i);
//让每个person都获取一个随机数
person[i].getRandomNumber();
}
for (int j=0; j<10; ++j)
{
cout << person[j].getNumber() << endl; //但是打印出来后每个成员的number值都是一样的!
}
}
你这样试试,你的问题主要是循环很快,每次得到的系统时间相同,所以随机数相同!
[解决办法]
1.用time()函数取得的值在一个循环连续调用,几乎一样,加一个断点调试,就会不同。所以
-----------------------
在运行的时候,我用一个输出函数测试发现每个成员得到的随机数都是一样的!
可是我加一个断点调试运行的时候,它们得到的数又不一样了~
-----------------------
2.srand只需要调一次。
- C/C++ code
class Rand{public: Rand(void); int GetRand();};Rand::Rand(void){ time_t ts; struct tm *timetbl; time(&ts); timetbl = localtime(&ts); srand(timetbl->tm_hour * timetbl->tm_min * timetbl->tm_sec);}int Rand::GetRand(){ return rand();} 