C函数使用指针计算错误

问题描述 投票:0回答:1

所以我一直在尝试编写我的第一个命令行游戏代码。我已经用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轮之后,我注意到在某些时候伤害输出是错误的,现在我遇到了这个问题:

enter image description here

我知道我的if出了点问题,并且有更好的方法来处理指针...您能帮我解决我的问题吗?

c function pointers
1个回答
0
投票

如果您阅读了编译器发出的警告,它们将告诉您确切的问题以及解决方法:

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的值设置为armor地址减去damage的值。相反,您需要将armor的值设置为armorvalue减去damage的值,因此在*之前使用armor

© www.soinside.com 2019 - 2024. All rights reserved.