c语言编程随机数的问题

img


为什么我弄随机数用了srand函数之后它生成的数没那么随机了,总是在原来数的附近生成。我最近在做贪吃蛇,弄生成食物,如果我不用srand,数生成看起来挺随机的,有远有近,但我用了srand,我吃完一个,生成下一个就在附近,我很奇怪,有没有人解答一下

srand在main中调用一次就够了。不需要在函数中调用,不然运行速度太快,种子一样导致随机数一样了。

srand是伪随机数,如果种子不变,那么随机数就是固定的,你查看下,你每次调用随机时,种子是不是值都差不多。

C:\Program Files (x86)\Windows Kits\10\Source\10.0.20348.0\ucrt\stdlib\rand.cpp

//
// rand.cpp
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// Defines rand(), which generates psuedorandom numbers.
//
#include <corecrt_internal.h>
#include <stdlib.h>



// Seeds the random number generator with the provided integer.
extern "C" void __cdecl srand(unsigned int const seed)
{
    __acrt_getptd()->_rand_state = seed;
}



// Returns a pseudorandom number in the range [0,32767].
extern "C" int __cdecl rand()
{
    __acrt_ptd* const ptd = __acrt_getptd();

    ptd->_rand_state = ptd->_rand_state * 214013 + 2531011;
    return (ptd->_rand_state >> 16) & RAND_MAX;
}