c - 之后使用 rand() 和 srand(time(NULL)) 不会生成新的随机数

标签 c loops random srand

for (x = 1; x < 10; x++)
{
    (armoPtr + x) ->def = rand() % b + a;
    if ((armoPtr + x) -> def > b)
        (armoPtr + x) -> def = b;

    srand(time(NULL));

    (armoPtr + x) -> hp = rand() % 5 + 1;
    srand(time(NULL));

    (armoPtr + x) -> valOItem = rand() % (lvlpnts + 1) + max(lvlpnts);
    if ((armoPtr + x) -> valOItem > (lvlpnts + 1))
        (armoPtr + x) -> valOItem = (lvlpnts + 1);
    (armoPtr + x) -> valOItem *= 10;
    srand(time(NULL));
}

如果这是一个相当平庸的错误,请原谅我,但是这个循环不应该在每次循环时都有新的随机数吗?我仍处于通信科学第一年的第二个学期。抱歉,如果我很糟糕。哈哈哈哈

最佳答案

在开始抽取随机数之前调用 srand 一次

srand(time(NULL));
for (x = 1; x < 10; x++)
{

然后在循环内调用 top rand() :

srand(time(NULL));
for (x = 1; x < 10; x++)
{
    (armoPtr + x) ->def = rand() % b + a;
    if ((armoPtr + x) -> def > b)
        (armoPtr + x) -> def = b;

    (armoPtr + x) -> hp = rand() % 5 + 1;

    (armoPtr + x) -> valOItem = rand() % (lvlpnts + 1) + max(lvlpnts);
    if ((armoPtr + x) -> valOItem > (lvlpnts + 1))
        (armoPtr + x) -> valOItem = (lvlpnts + 1);
    (armoPtr + x) -> valOItem *= 10;
}

在同一秒内多次向 srand 提供 time(NULL) 将使您从头开始绘制相同的数字,因为 time(NULL) 粒度为秒。

关于c - 之后使用 rand() 和 srand(time(NULL)) 不会生成新的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919857/

相关文章:

java - 第一个应用程序 - Random.nextInt() Unresolved 引用

c - 减法运算的-和-符号的区别

loops - 为什么 Vector3 不更新 Unity3d

python - 为什么我在循环 pandas 数据帧时收到此错误

php - 如何在 PHP/MYSQL 中将两个 mysql 查询作为一个执行?

matlab - Matlab显示点的坐标

php - MYSQL数据库中的随机图片

c - C 项目的基本 makefile

C:哪个更好? Malloc 结构指针数组,还是结构数组?

c - clang <built-in> 头文件在哪里?