C 函数中的函数不工作

C 函数中的函数不工作,c,function,random,C,Function,Random,我有一个在C语言中生成随机数的函数。当我在main()函数中调用它时,它可以正常工作。但当我试图在另一个函数定义中调用它时,它一次又一次地返回相同的数字。请帮忙。我无法理解这样做的原因 double uniform_deviate ( int seed ) { return seed * ( 1.0 / ( RAND_MAX + 1.0 ) ); } int rand_range(int min_n, int max_n) { return min_n + uniform_deviate (

我有一个在C语言中生成随机数的函数。当我在main()函数中调用它时,它可以正常工作。但当我试图在另一个函数定义中调用它时,它一次又一次地返回相同的数字。请帮忙。我无法理解这样做的原因

double uniform_deviate ( int seed )
{
return seed * ( 1.0 / ( RAND_MAX + 1.0 ) );
}

int rand_range(int min_n, int max_n)
{
return  min_n + uniform_deviate ( rand() ) * ( max_n - min_n );
}

int rand_slot(int num_values)
{
int x;
x=rand_range(0,num_values);
return x;

 } 

 void main()
 {
   int x,y; 
    x=rand_range(0,10) - 'works fine'
    y=rand_slot(6) - 'gives 5 as the output repeatedly' 
  }

正如下面的测试程序所示,您的两个函数都工作得很好,只是您总是使用相同的随机种子,因此每次运行此程序时,它都会给出相同的结果。您可以删除
srand()之前的注释标记来修复此问题

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

double uniform_deviate ( int seed )
{
    return seed * ( 1.0 / ( RAND_MAX + 1.0 ) );
}

int rand_range(int min_n, int max_n)
{
    return  min_n + uniform_deviate ( rand() ) * ( max_n - min_n );
}

int rand_slot(int num_values)
{
    int x;
    x=rand_range(0,num_values);
    return x;

} 

int main()
{
    int x,y,i; 

    //srand(time(NULL));
    for (i = 0; i < 10; i++) {
        x=rand_range(0,10);
        y=rand_slot(10);
        printf("i = %d : %d %d\n", i, x, y);
    }

    return 0;
}

该测试程序可用于显示这两个功能将给出相同的数字列表:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

double uniform_deviate ( int seed )
{
    return seed * ( 1.0 / ( RAND_MAX + 1.0 ) );
}

int rand_range(int min_n, int max_n)
{
    return  min_n + uniform_deviate ( rand() ) * ( max_n - min_n );
}

int rand_slot(int num_values)
{
    int x;
    x=rand_range(0,num_values);
    return x;

} 

int main()
{
    int x,i;

    srand(1);
    for (i = 0; i < 10; i++) {
        x=rand_range(0,10);
        printf("i = %d : %d\n", i, x);
    }

    printf("\n\n");

    srand(1);
    for (i = 0; i < 10; i++) {
        x=rand_slot(10);
        printf("i = %d : %d\n", i, x);
    }

    return 0;
}

如果你能给出你的函数的定义,以及一些它起作用和不起作用的例子,我们将更好地回答你的问题。任何能够回答这个问题的人都能够编写正确的随机函数,因此在猜测您的实现时不会重复您的错误。请先看一遍,“反复”是什么意思?您的代码只调用它一次。“反复”从何而来?其次,您的代码不执行任何输出。那么,你说的是什么“产出”?如何检查
x
y
?您在每次启动(签出)时对
rand()
使用相同的种子。@Sourav Mandal:x
y
在每次运行代码时都包含相同的一对值,因为
rand()
的种子值从未更改(你必须使用
srand
)但是你声称第一个调用“工作正常”,而第二个调用“工作正常”。这是什么意思?再说一次,每次运行代码时,两个调用都会产生相同的值,但您对第一个调用感到高兴,对第二个调用感到不高兴。为什么?有什么区别吗?我非常清楚这一点,但使用rand_插槽每次运行都会得到相同的no,但使用rand_range的随机nos,我使用的是Visual C。知道为什么吗正在发生什么事?@SouravMandal你复制并粘贴了我的测试程序吗?那我不知道。我在Linux上用GCC 4.7.2测试了它。如果在rand_槽内进行种子植入,会改变什么吗?@SouravMandal哦,这可以解释你观察到的现象。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

double uniform_deviate ( int seed )
{
    return seed * ( 1.0 / ( RAND_MAX + 1.0 ) );
}

int rand_range(int min_n, int max_n)
{
    return  min_n + uniform_deviate ( rand() ) * ( max_n - min_n );
}

int rand_slot(int num_values)
{
    int x;
    x=rand_range(0,num_values);
    return x;

} 

int main()
{
    int x,i;

    srand(1);
    for (i = 0; i < 10; i++) {
        x=rand_range(0,10);
        printf("i = %d : %d\n", i, x);
    }

    printf("\n\n");

    srand(1);
    for (i = 0; i < 10; i++) {
        x=rand_slot(10);
        printf("i = %d : %d\n", i, x);
    }

    return 0;
}
$ ./a.out 
i = 0 : 8
i = 1 : 3
i = 2 : 7
i = 3 : 7
i = 4 : 9
i = 5 : 1
i = 6 : 3
i = 7 : 7
i = 8 : 2
i = 9 : 5


i = 0 : 8
i = 1 : 3
i = 2 : 7
i = 3 : 7
i = 4 : 9
i = 5 : 1
i = 6 : 3
i = 7 : 7
i = 8 : 2
i = 9 : 5