C 为什么psuedo随机数生成器只有0.000000?

C 为什么psuedo随机数生成器只有0.000000?,c,random,C,Random,为什么rand_float只返回0.000000的值 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int test, int numpoints, int numtrials, int dimension){ //generate a random number float r = rand_float(); //print it pr

为什么rand_float只返回0.000000的值

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

int main(int test, int numpoints, int numtrials, int dimension){

    //generate a random number
    float r = rand_float();

    //print it
    printf("%f", r);
    printf("\n");
}

//function generates a random float in [0,1]
int rand_float(){
    srand(time(NULL));
    return (float)rand()/RAND_MAX;
}
#包括
#包括
#包括
int main(int test、int numpoints、int numtrials、int dimension){
//生成一个随机数
浮动r=随机浮动();
//打印出来
printf(“%f”,r);
printf(“\n”);
}
//函数在[0,1]中生成一个随机浮点
int rand_float(){
srand(时间(空));
返回(浮动)rand()/rand_MAX;
}

注意rand\u float的返回类型是
int

因此
[0,1)
值(在浮点中)被隐式转换为
0
(一个int),这是函数将返回的全部内容

通过将返回类型从
int
更改为
float
,修复返回类型


另外,向前声明rand_float函数或将函数定义移到main函数前面..并查看关于主要问题的其他注释。启用(并阅读)编译器警告以获取关于[潜在]的提示有问题的代码!

我不太明白。我可以用float而不是int来声明函数吗,就像在float rand_float(){…}中一样?@hannah是的,你可以..但是你应该向前声明函数(用声明或移动定义)。在这种情况下,只需将
rand\u float
函数定义移到
main
上方即可。为什么不可以?函数也可以返回任何内容,将
srand()
移到函数外部,并将其放入
main()
它所属的位置,否则即使在修复浮点问题后,您的数字也不会是随机的。因为您是从
int rand\u float()返回一个int的。
也不是这样定义的,所以您不能使用任意参数