变量变为1

时间:2017-03-20 03:34:12

标签: c

这是我的第一个C程序之一。我试图猜测数字游戏,我已经使用调试器计算出我要求rand_number函数的行变量' r'回到了1'。我无法解决原因。 如果我把代码放到main()中,程序按预期工作,但我想使用一个函数来体验

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void rand_number (int r) //Function to generate a random number and assign it to 'r'.
{
    srand(time (NULL));
    r = rand()%1000+1;
}
int main()
{
int guess, r, correct=0;
rand_number (r); //Run the random number function (This is where 'r' is switching back to '1'

printf("Guess a number!\n"); //User takes a guess
scanf("%d", &guess);

while (correct != 1) //Loop to give the user multiple guesses until they are correct
{
    if(guess == r)
    {
        correct++;
    }
    else if (guess < r)
    {
        printf("Too low, please guess again.\n");
        scanf("%d", &guess);
    }
    else
    {
        printf("Too high, please guess again.\n");
        scanf("%d", &guess);
    }
}
printf("Congratulations! You guessed it!");
return 0;
}

3 个答案:

答案 0 :(得分:2)

您按价值将r传递给rand_number(),这意味着rand_number()只能在其本地范围内对其进行修改。

如果要修改调用者中的原始变量,则必须将其作为指针传递。

void rand_number(int *r)
{
    *r = rand()%1000;
}

int main()
{
    int r;
    rand_number(&r);
    ...
}

或者只是返回值。

int rand_number()
{
    return rand()%1000;
}

int main()
{
    int r = rand_number();
    ....
}

另一个问题是你每次都在呼叫srand()。您应该只播种一次,如果您继续调用此函数,您将重置随机数生成器,它将继续生成相同的数字。

答案 1 :(得分:1)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int rand_number ()
{
    srand(time (NULL));
    return rand()%1000+1;
}
int main()
{
    int guess, r, correct=0;
    r = rand_number (); //return the value here
    //rest of the code
}

使用return方法从rand_number

中检索值

答案 2 :(得分:0)

在C中,如果要更改函数内部变量的值,则必须将指针传递给函数,如下所示:

void rand_number(int* r)
{
    srand(time(NULL));
    *r = rand()%1000 + 1;
}

并通过rand_number(&r)进行调用。另一种方法是返回函数内的随机数并将其分配给r,如下所示:

int rand_number()
{
    srand(time(NULL));
    return rand()%1000 + 1;
}