所以,有一点背景知识,我必须创建一个程序,在其中生成一个秘密数字,用户必须输入一个三位数的数字作为猜测,并且该程序应始终打印提示。如果在正确的位置有一个数字,则提示将打印“ fermi”;如果在正确的位置具有一个数字,则提示“ pico”;如果没有正确的位置,则显示“百吉饼”。我遇到的问题是我不断收到错误消息或警告消息“不使用强制转换就从指针生成整数”,我认为我没有正确将指针传递给函数,因此如果有人可以帮助我,将不胜感激
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
srand((int)time(NULL));
play_game();
}
void play_game()
{
int *num1 = 0;
int *num2 = 0;
int *num3 = 0;
int guess,first,second,third, x;
theSame(&num1, &num2, &num3);
do
{
printf("\nPlease enter a three digit number as your guess or enter 0 to exit: ");
x = scanf("%d", &guess);
if(!x == 0)
{
first = guess/ 100;
second = (guess%100) /10;
third = guess %10;
printf("Guess: %d, ", guess); print_hint(guess, num1,num2,num3);
is_guess_correct(guess, num1, num2, num3);
}
}
while((!x == 0));
}
void generate_secret_number(int *a, int *b, int *c)
{
*a = (rand() % 9) + 1;
*b = (rand() % 10);
*c = (rand() % 10);
}
int is_guess_correct(int guess, int a, int b, int c)
{
int first, second, third;
first = guess/ 100;
second = (guess%100) /10;
third = guess %10;
if (first == a && second == b && third == c)
{
return 1;
}
else
{
return 0;
}
}
void print_hint(int guess, int a, int b, int c)
{
int first, second, third;
first = guess/ 100;
second = (guess%100) /10;
third = guess %10;
if (a == first || b == second || c == third)
{
printf("Fermi, ");
}
if (first == b || first == c || second == a || second == c || third == a || third == b)
{
printf("Pico, ");
}
if (a == first && b == second && c == third)
{
printf("Winner !!");
}
else if(a != first && b != second && c!= third)
{
printf("Bagels");
}
}
void theSame(int *a, int *b, int *c)
{
generate_secret_number(a,b,c);
while(*a == *b || *b == *c || *c == *a)
{
if (*a == *b)
{
*a = (rand() % 8) + 1;
}
if (*b == *c)
{
*b = (rand() % 9);
}
if (*a == *c)
{
*c = (rand() % 9);
}
}
printf("\nsecret number: %d%d%d", *a,*b,*c);
}
答案 0 :(得分:2)
int *num1 = 0;
int *num2 = 0;
int *num3 = 0;
我认为这不是您想要的。您声明3个指向0
的指针,没有分配内存,然后将指针的地址传递给void theSame(int *a, int *b, int *c)
。
也许您想从声明中删除*
,然后声明普通变量,然后在将其地址传递给函数时使用正确的接口。
如果将numX
声明为整数而不是指针,则所有其他接口也将正确使用。因此,请改用此:
int num1 = 0;
int num2 = 0;
int num3 = 0;
您还应该在使用函数之前声明它们,因此,您应该使用前向声明(推荐)或在文件开头复制这些函数。
作为旁注,如果您使用-Wall
激活警告,则会发现int first, second, third
中未使用play_game()
答案 1 :(得分:1)
指针处理存在两个主要问题:
the_same
的函数调用需要指向int的指针,但是您正在传递指针的地址。
第二个问题是调用is_guess_correct
和调用print_hint
。它需要三个Integer,但是您要传递指针而不是它们的值。
解决方案是用整数替换指针的声明。然后,您要将变量的地址传递给the_same
,并将值传递给其他函数。