我有一个在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'
}
答案 0 :(得分:2)
正如下面的测试程序所示,除了你总是使用相同的randome种子之外,你的两个函数都运行得很好,因此每次运行这个程序时,它都会给你相同的结果。您可以在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