c - 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 有问题,并且有更好的方法来解决指针...你能帮我解决我的问题吗?
解决方案
如果您阅读编译器发出的警告,它们会准确地告诉您问题出在哪里,以及如何解决它:
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 ,就像您正确使用的那样。armor
damage
armor
armor
damage
*
armor
(*life) = (*life) - difference;
推荐阅读
- python - Python Scikit - 学习:使用多索引进行交叉验证
- reactjs - 如何使用与 es6 语法反应的函数将参数从子级传递给父级
- angular - Angular 6:添加后访问子组件
- reactjs - 反应 mobx,组件不呈现新的 observable
- python - 如何将数据从不同页面的表单保存到同一模型...注册多个字段?姜戈
- c# - 当我最小化到 notifyicon 并在之后将其最大化 2-3 次时,Form 冻结并且有时会出现错误
- enterprise-architect - Enterprise Architect Document Generator 创建标题不一致的报告
- c# - 尝试下载pdf时如何修复错误
- fiware - 错误:无法找到或加载主类 com.telefonica.iot.cygnus.nodes.CygnusApplication
- wordpress - 将 WooCommerce 订单保存到另一个数据库