我似乎无法弄清楚为什么这不起作用。我试图让这两个 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()
。
我是一名优秀的程序员,十分优秀!