【发布时间】:2014-09-13 10:38:55
【问题描述】:
我一直在尝试编写一个小的 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 到100. 正如 cmets 中所建议的,使用 randValue=a+(int)rand()%(b-a+1); 解决了这个问题
【问题讨论】:
-
不要在随机函数中调用
srand。 -
扩展退休忍者的评论。 srand 用于(一次)初始化,然后 rand 用于检索值。
-
谢谢你,忍者,它成功了!现在,还有一个小问题 - 我正在尝试生成从 100 到 200 的数字,但是该函数生成的值低于 100。我该如何解决这个问题?
-
Bung
srand(time(NULL));在 main 之后 -
注意:如果代码在同一秒内执行两次,通常
main()中的srand(time(NULL));技巧无法“使随机值函数每次返回不同的值”。另一种方法是从文件中提取srand(seed)中的seed值,并在每个程序运行时递增它。有很多方法可以解决这个问题。