如何使随机值函数每次返回不同的值

时间:2014-09-13 10:38:55

标签: c random srand

我一直在尝试编写一个小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);解决了这个问题

3 个答案:

答案 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)

我正在使用minmax ab。对于未来的代码读者来说,这是更好的

  1. 您应该在初始化时仅使用srand(time(NULL)),例如main()
  2. 您可能希望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;
}