2014-09-13 112 views
2

我一直在试图编写一个用于生成随机值的小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。这与randValue=a+(int)rand()%(b-a+1);解决作为意见提出

+5

不要在随机函数内调用'srand'。 – 2014-09-13 10:41:23

+0

展开退休忍者的评论。 srand用于(一次)初始化,然后rand用于检索值。 – 2014-09-13 10:46:51

+0

谢谢,忍者,它的工作!现在,再一个小问题 - 我试图产生从100到200的数字,但函数生成值在100以下。我该如何解决这个问题? – 2014-09-13 10:47:19

回答

1

srand(time(NULL));main只是{

后,在100-200范围内生成随机数,而不是加1,加100或a

randValue=(int)rand()%(b-a+1); 

因此,它看起来像:

randValue=(int)rand()%(b-a+1)+100; 
+1

这不会解决他的第二个问题 – Quest 2014-09-13 10:59:08

+1

他的第二个问题是什么?没有什么更多的问题 – 2014-09-13 10:59:55

+0

你应该真的阅读问题 – Quest 2014-09-13 11:00:32

0

我使用minmax INSEAD的ab。它是你的代码的未来读者更好地

  1. 你应该在初始化例如,在你的main()
  2. 你可能想min + rand() % (max - min + 1)代替rand()%(b-a+1)
+0

-1你不能在'randInt'函数中使用'min'或'max',因为它们是局部变量 – 2014-09-13 11:15:46

+0

@CoolGuy ups仔细阅读我**做过**提及 – Quest 2014-09-13 11:28:54

+0

啊,你编辑了它。 – 2014-09-13 11:29:48

1

使用srand(time(NULL))只有一次这样每次打印随机值在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; 
} 
+0

删除了我以前的评论+1 – Quest 2014-09-13 11:27:42

+0

@chux:谢谢:) – user1336087 2014-09-13 14:23:49