【发布时间】:2021-10-23 07:53:07
【问题描述】:
尝试创建一个使用rand() 和srand() 生成随机数的函数。
此代码成功打印 3 个随机数:
//prints a random number from 1 to 10 3 times.
void main()
{
int num;
srand(time(NULL));
num = rand() % 10;
printf("%d\n", num);
num = rand() % 10;
printf("%d\n", num);
num = rand() % 10;
printf("%d\n", num);
}
//Output: 3 5 6
这个使用函数的代码没有:
//calls PrintRandomNumber 3 times.
void main()
{
int i=0, num;
for(i=0; i<3; i++)
{
printRandomNumber(0, 10);
}
}
//Prints a random numberin the range of lowestValue to highestValue.
void printRandomNumber(int lowestValue, int highestValue)
{
int randomNumber = 0;
srand(time(NULL));
randomNumber = (rand() % (highestValue - lowestValue + 1)) + lowestValue;
printf("%d\n", randomNumber);
}
//Output: 3 3 3
问题是多次调用srand(time(NULL))。
函数能否使用rand() 和srand() 打印/返回一个随机数,而不必在main 中调用srand(time(NULL))?
【问题讨论】:
-
只需拨打
srand(time(NULL));一次 - 来自main,然后再执行任何其他操作。 -
... 问题是因为您的三个函数调用在彼此之后运行得非常快,以至于当前时间不会改变,并且每次都得到相同的种子。
-
回答您的最后(编辑)点 - 是的,您可以。只需使用其他东西作为
srand()的参数,或者在调用之间等待。
标签: c function random-seed srand