用rand()把,如果要设置范围的化就取余

解决方案 »

  1.   

    用srand()设置随机种子,再用rand()取随机数。注意rand()是伪随机,如果srand()设置不变,
    rand()在程序每次重新执行后的值相等。
      

  2.   

    难道说Windows系统没有什么Win32 API吗?
      

  3.   

    另外在Windows系统下rand()函数好像有点问题?
    我使用下面的代码:
     UINT m_uWidth=40;
     srand(m_uWidth);
     int x=rand();  或者 int x=(BYTE)rand(); 或者 int x=(WORD)rand();
    结果却产生一个很大的数,好几百的,每次都是,为什么呢?
    是不是rand()函数在Windows下不兼容呀?我的系统是Windows2000中文版!
      

  4.   

    确实没有什么新的API函数用来取随机数,因为rand()完全可以运行的很好了。
    也许你在使用rand()函数的时候发现每次运行程序得到的随机数总是差不多大,其实你用同一个随机数种子多rand()几次就好了,rand()的次数越多,数据越随机。因为rand()也是机器的一种算法,所以不可能是真的随机的。所以建议你这样干。随机性就会大大增强:
    方法一:
    UINT m_uWidth=40;
    srand(m_uWidth);
    rand();
    rand();
    x = rand();  //第三次调用随机性就很大了
    srand(x);    //再用随机数作为种子
    x = rand();  //这样就很随机了方法二:srand( (unsigned)time( NULL ) );  //取时间为种子for( i = 0;   i < 10;i++ )
       rand();int  x = rand();                    //取第11个随机数为自己所用,非常随机了。
      

  5.   

    To jason802(小糊涂仙):
        我想说的是为什么我设置的srand()函数没有起作用呀?    因为明明已经将 m_uWidth=40 了,但使用 srand(m_uWidth) 后结果为什么会产生一个超过m_uWidth(40)的随机数呢?
      

  6.   

        各位,为什么会产生一个超过 srand(m_uWidth) 中参数的随机数呢? 
    srand(m_uWidth) 函数不是指定产生一个 〔0-m_uWidth〕 之间的随机数吗?
    不会是我理解错了吧!
      

  7.   

    msdn里的例子是这样的:srand( (unsigned)time( NULL ) );  //取时间为种子
    rand();这样才是真正的随机。
      

  8.   

    srand是设置随机数的种子,是不会设置范围的。你可以对随机数处理一下,就可以得到你要的范围了。
      

  9.   

    兄弟,你理解错了,srand(x),是取x为种子去计算随机数,随机数的大小为0~RAND_MAX(这个数=16进制0x7fff),你要取0~m_nWidth之间的随机数,就这样
    int x = rand()%(m_nWidth+1)
      

  10.   

    The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.RAND_MAX = OX7FFF in VC++
      

  11.   

    在计算机上产生都是伪随机数,它是根据公式算出来的。如果每次种子相同,则会得到相同的
    随机数序列,起不到很好的作用。
            正常用法是:
                  srand( (unsigned)time( NULL ) );  //取时间为种子
                  rand();
    目前还没有增加随机性的简单方法。
                     
      

  12.   

    谢谢各位的参与!
    尤其是 jason802(小糊涂仙) 老兄,谢谢你一针见血的指出的问题的实质!
    至于设定范围的方法有很多种的,我也会找到一种比较好的方法!