请教高手,我这样编srand为什么不起作用?

来源:百度知道 编辑:UC知道 时间:2024/06/03 03:32:29
想把rand()函数返值做成个函数头文件 代码如下:

#if!defined (SJS_H)
#define SJS_H

#include<stdlib.h>
#include<time.h>

int sjs(){
srand((unsigned int)time(0));
if(rand()<(32767*0.75)) return 1;
else return 0;
}
#endif

// main function
#include<iostream>
#include<string>
#include"sjs.h"
int main(){
for(int i=0;i<5;i++)
{
cout<<sjs()<<endl;
}
return 0;
}

结果输出全部是0;如果注释掉srand那句,输出正常?不知道为什么?

因为运算速度太快,srand((unsigned int)time(0)); 中用的“现在时间”在5次循环中未变,rand()送返的伪随机数序列的第一个数相同。

你应把srand放到循环以外,让rand()依次送返的伪随机数。

或加入延时,使srand送返的种子发生可见的变化。