我是这样写的:/* 以一定概率产生0或1 */
int flip(float r)         
{
    float rnd;
    srand((unsigned)time(NULL) );
    rnd = rand();
    fprintf(tp,"%f\n",rand);
    if(rnd <= prob)
        return(1);
    else
        return(0);
}结果每次值都一样,为什么阿?
我的种子已经设置了阿!

解决方案 »

  1.   

    srand((unsigned)time(NULL) ); 只能调用一次 
    int flip(float r)         
    {
        float rnd;
        srand((unsigned)time(NULL) );
        for(int i=0;i<10;i++)
        {
           rnd = rand();
           fprintf(tp,"%f\n",rand);
        }
        if(rnd <= prob)
            return(1);
        else
            return(0);
    }
      

  2.   

    你每次调用该函数都将调用srand((unsigned)time(NULL) );
    初始化 那么产生的随机数相同因为你的time是固定的 
    或者改为 
    Ctime t  
    ((unsigned)(NULL)
      

  3.   

    CTime tm;
    tm = CTime::GetCurrentTime ()
    srand((unsigned)tm(NULL) );
      

  4.   

    问题在:
    srand((unsigned)time(NULL) );
      

  5.   

    我改为
    CTime tm;
    tm = CTime::GetCurrentTime ();
    srand((unsigned)tm(NULL) );后提示:term does not evaluate to a function估计要将tm进行转换
      

  6.   

    而且程序运行很快
    此时tm = CTime::GetCurrentTime ();应该多是一样的吧
    我觉得没有用吧!
      

  7.   

    楼主粗心大意了吧
    我也出过这样的哦
    if(m=2)
    可笑吧
      

  8.   

    int GetRandVal(int iMin, int iMax)
    {//在min和max范围内取一个随机数值
    static int iInitSeed;
    if( iMin >= iMax ) return iMin;
    if( iInitSeed != 1 ) 
    {
    srand( (UINT)time( NULL ) );
    iInitSeed = 1;
    }
    return iMin + rand() % ( iMax - iMin + 1 );
    }
      

  9.   

    srand( GetTickCount() );
      

  10.   

    把srand((unsigned)time(NULL) );提到函数外面。在整个程序中保证srand((unsigned)time(NULL) );只执行一次。
      

  11.   

    如果用GetTickCount() ,则每一次得到值都一样的
    我希望可以在一个循环中不断得到新的不同的随机值。
    但是按照上面办法,都不行!可能要自己写一个!
      

  12.   

    怎么可能,试试这个吧
    #include<iostream.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<time.h>
    const prob = RAND_MAX/2;
    int flip()         
    {
        int rnd;
        rnd = rand();
        //fprintf(tp,"%f\n",rand);
        if(rnd <= prob)
            return(1);
        else
            return(0);
    }
    void main()
    {
        srand((unsigned)time(NULL) );
    for(int i=0;i<30000;i++)
    {
    cout<<flip()<<" ";
    }
    }
      

  13.   

    srand((unsigned)time(NULL));   //初始化随机种子数
    int x[9]={0,1,2,3,4,5,6,7,8};
    int num=9;
    int position;
    for(int i=0;i<=2;i++)
    {
    for(int j=0;j<=2;j++)
    {
    position=rand()%num;     //产生随机的position }
    }
      

  14.   

    srand((unsigned)time(NULL) );
    srand( GetTickCount() );
    都没有错,而是rand()的值是由0至RAND_MAX(好像是0x7FFF)随机值,如果你的
    if(rnd <= prob)
    中的prob是一个极小的数,就会极易偏向一边了。
    产生0或1的随机数
    int nRand = rand() % 2;