使用rand生成随机数

ant*_*009 8 c

gcc 4.4.4 c89

我正在使用下面的代码.但是,我一直得到相同的数字:

    size_t i = 0;

    for(i = 0; i < 3; i++) {
        /* Initialize random number */
        srand((unsigned int)time(NULL));
        /* Added random number (simulate seconds) */
        add((rand() % 30) + 1);
    }
Run Code Online (Sandbox Code Playgroud)

我想回到0到30.但是,我最后一次跑这个三次得了17次.

非常感谢,

Mar*_*off 21

你播种环路(具有相同的价值,因为有多快循环将被执行),这将导致生成的是每一次相同的随机数.

您需要在循环移动种子函数:

/* Initialize random number */
srand((unsigned int)time(NULL));

for(i = 0; i < 3; i++) {
    /* Added random number (simulate seconds) */
    add((rand() % 30) + 1);
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*bus 9

你需要在你的程序开始时只调用一次srand.

srand使用时间以秒为单位初始化伪随机数生成器.如果使用特定数字对其进行初始化,则始终会获得相同的数字序列.这就是为什么你通常想要在开始时使用时间初始化它(这样每次运行程序时种子都不同)然后只rand用于生成看似随机的数字.

在你的情况下,时间不会从迭代变为迭代,因为它的分辨率只有1秒,所以你总是得到伪随机序列的第一个数字,它始终是相同的.