C输出中随机数发生器的用户自定义函数不正确

时间:2015-10-18 17:17:54

标签: c arrays random

对于这个程序,我们必须创建一个用户定义的函数,从60-100的值返回25个随机变量,但是当我运行程序时,所有25个值都是相同的。我对编程非常陌生,我认为错误存在于定义用户函数的位置,因为我认为不是运行变量25次,而是只运行一次并打印第一个值25次。但我不知道如何实际修复它:(

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

int get_value (int Random);

int main ()
{
    srand(time(NULL));//to randomize the number after each run
    int Random = rand()%40+60;

    printf("These are the temperatures for the day\n");
    int temp[25], i;
    for (i=0; i<25; i++) 
    {
        temp[i] = Random; 
        printf("%d\n" ,temp[i]);
    }
    return 0;
}

int get_value (int Random)
{
    Random = rand() % 40 + 60;
}

2 个答案:

答案 0 :(得分:1)

您分配给Random一次;然后每次通过循环复制其值,每次报告时给出相同的值。您需要在每次迭代时重新调用rand()来重新生成随机数。你拨打srand()一次是正确的;这很重要。

您的功能仅根据问题的要求生成60..99范围内的值,而不是60..100。修复是微不足道的;使用41而不是40。

当然,如果你从不打电话,拥有get_value()功能是没有用的。 OTOH,它不使用它的输入参数,并且它不返回一个值,所以也许你也从不使用它。

答案 1 :(得分:1)

那是因为get_value()没有返回任何内容。 Random参数是您(可能已)传递的Random副本。覆盖(非常量)函数争论是合法的,但它不会找到它对调用者的方式。第二个问题是你永远不会调用这个函数,只需重复你生成的第一个随机数。

我建议你重写这个函数

int get_value (void)
{
    return rand()%41+60;        // range 60 to 100
}

并像这样称呼它

temp[i] = get_value();