srand(),rand(),time(0)135
发布网友
发布时间:2023-11-12 17:17
我来回答
共2个回答
热心网友
时间:2024-11-16 20:48
你把 srand(time(0)) 放到循环前面就可以了。
原因: time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到! 也就是说,srand(time(0)) 连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。
如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand 就不一样了.但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。
另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。
一个简单测试用的sleep函数 :
void sleep(void)
{ time_t goal;
goal = 1 * CLOCKS_PER_SEC + clock(); //间隔1秒
while (goal > clock())
{
;
}
热心网友
时间:2024-11-16 20:49
rand()产生伪随机数。srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数,将time(0)的结果设置成种子。