这是我的第一个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;
}
答案 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;
}