首页 > 解决方案 > C函数用指针计算错误

问题描述

所以我一直在尝试编写我的第一个命令行游戏。我已经用 C 编码了大约几个月,这是我的第一种编码语言。在我不得不处理这个指针转换之前,我没有真正的问题。

这是我的功能:

void attack(int * life, int * armor, char * name){

int difference;
const int damage = 15;

print_Name(name);
printf(" attacks!\n");                                                                       

if((*armor) > damage){
    printf("The armor was able to defend the damage!\n\n\n");
    (*armor) = armor - damage;
}

if((*amor) <= damage){
    printf("Your Armor broke!\n");
    difference = damage - (*armor);
    (*life) = (*life) - difference;
    (*armor) = 0;
    printf("The attack caused %i damage.\n\n\n", difference);
}

else if ((*armor) == 0){
printf("\nThe attack has caused %i damage.\n\n\n", damage);
(*life) = life - damage;
};

}

为了更好地理解,我将我的变量从德语翻译成英语,但最终可能会有一些拼写错误。

问题是,我的游戏可以正常运行几轮。但是在大约 20-30 轮之后,我注意到伤害输出在某些时候是错误的,现在我遇到了这个问题:

在此处输入图像描述

我知道我的 if 有问题,并且有更好的方法来解决指针...你能帮我解决我的问题吗?

标签: cfunctionpointers

解决方案


如果您阅读编译器发出的警告,它们会准确地告诉您问题出在哪里,以及如何解决它:

q58348638.c:11:18: warning: incompatible pointer to integer conversion assigning
      to 'int' from 'int *'; dereference with * [-Wint-conversion]
        (*armor) = armor - damage;
                 ^ ~~~~~~~~~~~~~~
                   *(            )
q58348638.c:24:13: warning: incompatible pointer to integer conversion assigning
      to 'int' from 'int *'; dereference with * [-Wint-conversion]
    (*life) = life - damage;
            ^ ~~~~~~~~~~~~~
              *(           )

如果还不够清楚,问题是您将 的值设置为减去 的值armor地址。相反,您需要将 的值设置为减去的值,因此使用before ,就像您正确使用的那样。armordamagearmorarmordamage*armor(*life) = (*life) - difference;


推荐阅读