C语言结构体exp自动计算异常求助:输出值与预期不符
问题分析与解决方案
你的代码存在两个核心问题:
- 结构体typedef语法错误:原代码中
typedef struct stats { ... };未指定结构体别名,标准C中无法直接用stats enemy;声明变量(部分编译器可能兼容,但属于不规范写法)。 - 结构体成员初始化逻辑错误:C语言不允许在结构体定义时,用其他成员变量计算当前成员的初始值。此时
health和armor尚未分配内存、无有效值,exp会被初始化为随机垃圾值,也就是你看到的13743895。
修正方案1:用函数手动计算经验值
先修正结构体定义,再通过函数实现经验值的自动计算:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> // 修正typedef语法,添加结构体别名 typedef struct stats { int health; int armor; int exp; } stats; // 计算并更新经验值的函数 void update_enemy_exp(stats *enemy) { enemy->exp = (enemy->health * enemy->armor) / 50; } int main() { stats enemy; enemy.health = 10; enemy.armor = 10; // 设置属性后调用计算函数 update_enemy_exp(&enemy); printf("%i\n", enemy.exp); // 输出预期值2 return 0; }
修正方案2:用构造函数风格函数初始化敌人
如果需要一次性创建并初始化敌人角色,可以写一个封装初始化逻辑的函数:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct stats { int health; int armor; int exp; } stats; // 传入生命值和护甲值,返回初始化完成的敌人结构体 stats create_enemy(int health, int armor) { stats new_enemy; new_enemy.health = health; new_enemy.armor = armor; new_enemy.exp = (health * armor) / 50; return new_enemy; } int main() { // 直接创建初始化好的敌人 stats enemy = create_enemy(10, 10); printf("%i\n", enemy.exp); // 输出预期值2 return 0; }
补充说明
如果你的编译器支持C11及以上标准,也可以用匿名结构体初始化+复合字面量的方式简化,但上述两种方案兼容性更强,更符合C语言的常规编码习惯。
内容的提问来源于stack exchange,提问作者sutorigesu
相关产品推荐
相关产品推荐

