如果函数循环,带种子的rand不会随机返回

xam*_*mbo 9 c random

我在下面写了这个C代码,当我循环时,它返回一个随机数.如果执行myrand(),如何实现5个不同的随机值?

#include <stdio.h>
#include <stdlib.h>

int myrand() {
    int ue_imsi;
    int seed = time(NULL);
    srand(seed);
    ue_imsi = rand();

    return ue_imsi;
}

int main()
{
    int value = 0;
    int i=0;
    for (i=0; i< 5; i++)
    {
        value =myrand();
        printf("value is %d\n", value);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ara*_*raK 24

播种发生器应该进行一次(当然要生成每个随机数序列!):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int seed = time(NULL);
    srand(seed);
    int value = 0;
    int i=0;
    for (i=0; i< 5; i++)
    {
        value =rand();
        printf("value is %d\n", value);
    }
}
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 5

在循环之前将srand()调用移入main().

换句话说,拨打srand()一次然后rand()重复呼叫,不再进一步呼叫srand():

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int value = 0;
    int i = 0;
    srand(time(NULL));
    for (i = 0; i < 5; i++)
    {
        value = rand();
        printf("value is %d\n", value);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @xambo:当你快速连续多次调用`time()`时,它很可能返回相同的值,因为时钟没有勾选.当你使用相同的种子调用`srand()`时,对`rand()`的以下调用将返回相同的值.正如我所说的,每次需要随机值时都不要尝试重新初始化生成器. (2认同)