c - 函数内的函数不起作用

标签 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 ( 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;
}

运行结果:

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

这个测试程序可以用来证明这两个函数会给出相同的数字列表:

#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

关于c - 函数内的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23100520/

相关文章:

javascript - 如何使用 JavaScript 更改 <td> 的边框颜色?

javascript - 如何从 JavaScript 的 Math.random 生成包含边界的 Pareto 随机整数

多个弱符号的后果(C 链接器)

c - “prev”函数中的“current”和 “__schedule”有什么区别,为什么不直接使用current呢?

c - 替换c中二维数组中的值

java - 在Java中,如何模拟 "converting negative numbers casted by unsigned char in c"?

function - Delphi函数通用

c++ - 当 if 语句告诉它在 main 中返回 0 时,我的程序没有退出

php - 如何制作5个总和为100的随机数

arrays - 将函数结果打印到数组中