C 变量更改为1
这是我的第一个C程序之一。我正在尝试猜测数字游戏,我使用调试器计算出我调用rand_number函数的那一行变量“r”返回到“1”。我不明白为什么。 如果我将代码放入main()中,程序将按预期工作,但我希望使用函数来获得经验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
#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 insiderand_number
通过OP的一次调用,它“幸运”并起作用[其他人的答案都错过了这一点,所以我很惊讶你的答案不是被接受的答案]。对于grins:在一般情况下,它在第一个1秒的间隔内生成相同的值[可能只有几分之一秒],并在随后的每个时钟滴答声中更改为一个新值。srand(time(NULL))
call insiderand_number
通过OP的一次调用,它“幸运”并起作用[其他人的答案都忽略了这一点,所以我很惊讶你的答案不是被接受的答案]。对于GRIN:在一般情况下,它在第一个1秒间隔内生成相同的值[可能是一秒的分数],并在随后的每个时钟滴答声中更改为新值。