srand 函数

来源:百度知道 编辑:UC知道 时间:2024/05/06 12:17:32
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
int r,u;
time_t t;
srand((unsigned)time(&t));
for (int i=0;i<10;i++)
{

r=rand()%29;
u=rand()%33;
cout<<r<<endl;
cout<<u<<endl;
}
return 0;
}
为什么srand 函数要放到循环的外面??
如果放到里面的话r的值和u的值不会变化。
也就是输出的时候会是 1 2 1 2 1 2 1 2 明白人应该能看懂吧??

你把 srand(time(0)) 放到循环前面就可以了。
原因: time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到! 也就是说,srand(time(0)) 连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。

如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand 就不一样了.但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。

另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。

从 wangboxy2008 - 魔法师 四级 的回答中得到启发

建议写成函数来产生随机数

种子只需要初始化一次,放在哪都可以。随机值是随机的,谈不上变化不变化。输出的会是1212...没看懂