c - 生成一个秘密数字并在 C 中猜测它
问题描述
所以有一点背景,我必须创建一个程序,在其中你生成一个秘密数字,用户必须输入一个三位数的数字作为猜测,并且程序应该一路打印提示。如果数字在正确的位置,则打印“fermi”,如果数字正确但不在正确的位置,则打印“pico”,如果没有匹配,则打印“bagels”。我遇到的问题是我不断收到错误或警告消息“从没有强制转换的指针中生成整数”我假设我没有将指针正确传递到我的函数中,所以如果有人能帮助我,将不胜感激.
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);
}
解决方案
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()
推荐阅读
- java - CDI 中 @Inject 注释的空指针异常
- sql - 获取记录所需的 SQL oracle 查询
- javascript - 如何使用ajax将javascript值传递给aspx c#
- azure - 使用 ADF 将 14gb 文件从 ftp 复制到 azure 数据湖存储
- google-apps-script - 如何从 gmail 插件中检索电子邮件地址
- sql-server - 如何根据每月选择对最后插入的记录进行内联查询?
- embedded - IAR 预处理器:包含大量路径
- java - 将项目添加到 RecyclerView 的底部
- matlab - 如何修复“屏幕中请求的不支持的点大小('DrawDots')”错误?
- python - 如何提高在 Python 和 numpy 中提取数据代码的性能