我一直在尝试编写一个小C函数来生成随机值。问题是每次在for循环中调用函数时它返回相同的值。我理解问题是srand用NULL播种。我想知道的是如何纠正它,以便在for循环的每次迭代中函数返回不同的值。这是代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int randInt(int,int);
void main(){
int min=100, max=200,i=0;
for(i;i<11;i++){ printf("%d \n",randInt(min,max)); }
}
int randInt(int a,int b){
srand(time(NULL));
int randValue;
randValue=1+(int)rand()%(b-a+1);
return randValue;
}
如果您有解决方案或者可以发布一些解决方案的参考,请告诉我。提前谢谢!
编辑:遇到问题#2,在将srand(time(NULL))替换为main之后,每次迭代现在生成的数字都在我的范围之下,即最初我想要的数字在100和200之间,但它也包括0到0之间的数字100.按照评论
的建议,用randValue=a+(int)rand()%(b-a+1);
解决了这个问题
答案 0 :(得分:2)
将srand(time(NULL));
放在main
{
中
要生成100-200范围内的随机数,而不是添加1,请将100或a
添加到
randValue=(int)rand()%(b-a+1);
看起来像:
randValue=(int)rand()%(b-a+1)+100;
答案 1 :(得分:1)
我正在使用min
和max
a
和b
。对于未来的代码读者来说,这是更好的
srand(time(NULL))
,例如main()
min + rand() % (max - min + 1)
代替rand()%(b-a+1)
答案 2 :(得分:1)
每次在100-200之间打印随机值:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int randInt(int a,int b)
{
int randValue;
randValue = (rand() % (b-a+1)) + a;
return randValue;
}
int main(void) {
int r=0, i = 0;
srand(time(NULL));
do
{
r = randInt(100,200);
printf("%d\n",r);
i++;
}while(i < 11);
puts("Done!");
return 0;
}