C 变量更改为1

C 变量更改为1,c,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 numb

这是我的第一个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;
}
#包括
#包括
#包括
void rand_number(int r)//函数生成一个随机数并将其分配给“r”。
{
srand(时间(空));
r=rand()%1000+1;
}
int main()
{
int猜测,r,correct=0;
rand_number(r);//运行随机数函数(此处“r”切换回“1”)
printf(“猜一个数字!\n”);//用户猜一猜
scanf(“%d”,猜测(&guess);
while(correct!=1)//循环给用户多次猜测,直到猜测正确为止
{
如果(猜测==r)
{
正确的++;
}
else if(猜测
您正在通过值将
r
传递给
rand\u number()
,这意味着
rand\u 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()
。您应该只为它设定一次种子,如果您继续调用此函数,您将重置随机数生成器,它将继续生成相同的数。

您正在通过值将
r
传递给
rand\u number()
,这意味着
rand\u 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()
每次。您应该只对其进行一次种子设定,如果您继续调用此函数,您将重置随机数生成器,它将继续生成相同的数字。

在C中,如果您要更改函数内变量的值,您必须向函数传递一个指针,如下所示:

void rand_number(int* r)
{
    srand(time(NULL));
    *r = rand()%1000 + 1;
}
int rand_number()
{
    srand(time(NULL));
    return rand()%1000 + 1;
}
并通过
rand\u number(&r)
调用它。另一种方法是返回函数中的随机数并将其分配给
r
,如下所示:

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

在C语言中,如果要更改函数中变量的值,必须向函数传递指针,如下所示:

void rand_number(int* r)
{
    srand(time(NULL));
    *r = rand()%1000 + 1;
}
int rand_number()
{
    srand(time(NULL));
    return rand()%1000 + 1;
}
并通过
rand\u number(&r)
调用它。另一种方法是返回函数中的随机数并将其分配给
r
,如下所示:

void rand_number(int* r)
{
    srand(time(NULL));
    *r = rand()%1000 + 1;
}
int rand_number()
{
    srand(time(NULL));
    return rand()%1000 + 1;
}
#包括
#包括
#包括
整数随机数()
{
srand(时间(空));
返回rand()%1000+1;
}
int main()
{
int猜测,r,correct=0;
r=rand_number();//在此处返回值
//代码的其余部分
}
使用return方法从rand_number中检索值 #包括 #包括 整数随机数() { srand(时间(空)); 返回rand()%1000+1; } int main() { int猜测,r,correct=0; r=rand_number();//在此处返回值 //代码的其余部分 }
使用return方法从rand_number中检索值

它没有切换回1…它没有真正从rand_number(int r)中获取值因为它不是一个被引用的变量。
rand_number
中的
r
main
中的
r
是完全独立的变量。分配给一个变量不会影响另一个变量。它不会切换回1…它并不是真正从rand_number(int r)中获取值因为它不是一个被引用的变量。
rand_number
中的
r
main
中的
r
是完全独立的变量。分配给一个变量不会影响另一个变量。你应该每个程序调用
srand
一次,而不是每个随机数调用一次。你应该每个程序调用
srand
一次,而不是每个随机数调用一次数字+1和
srand(time(NULL))
call inside
rand_number
通过OP的一次调用,它“幸运”并起作用[其他人的答案都错过了这一点,所以我很惊讶你的答案不是被接受的答案]。对于grins:在一般情况下,它在第一个1秒的间隔内生成相同的值[可能只有几分之一秒],并在随后的每个时钟滴答声中更改为一个新值。
srand(time(NULL))
call inside
rand_number
通过OP的一次调用,它“幸运”并起作用[其他人的答案都忽略了这一点,所以我很惊讶你的答案不是被接受的答案]。对于GRIN:在一般情况下,它在第一个1秒间隔内生成相同的值[可能是一秒的分数],并在随后的每个时钟滴答声中更改为新值。