gpt4 book ai didi

c - 随机数发生器 C

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:45 25 4
gpt4 key购买 nike

我似乎无法弄清楚为什么这不起作用。我试图让这两个 void 函数在主函数中调用时生成随机数。我认为问题与 void 函数中的 srand(time(NULL)); 有关。我认为当它在 main 中被调用并在 for 循环中运行时,srand(time(NULL)); 不会更新,因此它会打印出相同的数字 x 次。 numGen_10 应根据变量生成 1-10,numGen_4 应生成 1-4。

如何让函数在每次调用时输出不同的随机数?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void numGen_10(int xOry, int* xRey);
void numGen_4(int num, int choice, int *choiceRe);


int main()
{
int x;
int num = 5;

for (int i = 0; i < 3; i++)
{
numGen_10(x, &x);
printf("val : %d \n", x);
}

printf("------------------------\n");

for (int i = 0; i < 4; i++)
{
numGen_4(4, x, &x);
printf("val2 : %d \n", x);
}
return 0;
}



void numGen_10(int xOry, int *xRey)
{
srand(time(NULL));
int r = rand() % 10 + 1;
xOry = r;
*xRey = xOry;
return;
}

void numGen_4(int num, int choice, int *choiceRe)
{
srand(time(NULL));
choice = rand() % num + 1;
*choiceRe = choice;
return;
}

最佳答案

随机数生成器是完全确定的;对于任何给定的种子,它将始终输出相同的数字序列。 srand() 为随机数生成器提供种子。因此,通过在每次调用 rand() 之前立即调用 srand(),并且由于您的循环执行时间不到一秒,您将始终获得相同的随机数(如果时间恰好在中间发生变化,则可能是两个)。

在进入循环之前尝试调用一次 srand()

关于c - 随机数发生器 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com