下面代码中有一句代码,一加上就蹦了,怎么回事啊?大神帮忙看看
c4droid吧
全部回复
仅看楼主
level 7
下面代码中
有一句代码,一加上就蹦了,怎么回事啊?
大神帮忙看看呗
#include<stdio.h>
#include<string.h>
typedef struct _prop//商店结构体
{
int ID;
char name[50];
int stock; //存量
double price;//单价
char desc[500];//描述
}Prop;
typedef struct _bag//背包结构体
{
int playerID;
int count;//道具数量
int max;//道具插槽总数
Prop props[]; //商店数组
}Bag;
typedef struct _player //玩家结构体
{
int ID;
char name[50];
char pass[50];
double gold;//金币
Bag bag;//背包
}Player;
void init();//初始化
void showprop();//打印商品
void showplayer();//打印玩家
void Trade(Player *player , int propid);
void chakanbag();
Prop *props;//商品指针
Player *players;//玩家指针
int count;
int main()
{
init();
printf("交易前-----------------\n");
showprop();
showplayer();
Trade(&players[0],1);
printf("交易后-----------------\n\n\n");
showprop();
showplayer();
chakanbag();
return 0;
}
void init ()
{
static Prop proparry[]={
{1,"低阶经验丹",5,100,"使用后增加50点经验"},
{2,"木剑",2,300,"装备增加10点攻击"}
};
count = sizeof (proparry) / sizeof (Prop);
props=proparry;
static Player playerarry[]={
{1,"魔戒","123456",1000,},
};
players=playerarry;
players[0].bag.max=8;
}
void showprop()
{
if (props!=NULL)
{
printf ("%-4s%-12s%s\t%s\t%s","编号","名称","数量","价格","描述\n");
for (int i=0;i<count;i++)
{
printf ("%-4d%-12s%-10d%-8.2lf%s\n",props[i].ID,props[i].name,props[i].stock,props[i].price,props[i].desc);
}
}
}
void showplayer()
{
printf ("ID:%d\n名称:%s\n金币:%.2lf\n",players[0].ID,players[0].name,players[0].gold);
}
void Trade(Player *player , int propid)
{
int i=0;
Prop *tradeprop=NULL;
for (i=0;i<count;i++)//获取物品信息
{
if (propid==props[i].ID)
{
tradeprop=&props[i];
break;
}
}
if (tradeprop->stock<=0)
printf("存货不足无法购买!!!\n");
else if (players[0].gold<tradeprop->price)
printf("**!没钱就滚吧!\n");
else if (players[0].bag.count>=players[0].bag.max)
printf ("大爷您背包满了,请清理空间!!!\n");
else {
int id = players[0].bag.count;//玩家背包数量
players[0].gold-=tradeprop->price;
tradeprop->stock--;
// players[0].bag.props[id].ID=tradeprop->ID;
//加上这条命令之后蹦了
printf("购买成功!\n");
}
/*
tradeprop->stock--;//商品-1
players->gold -= tradeprop->price;
printf("购买成功!\n");
for (i=0;i<players->bag.count;i++)
{
if (propid==players->bag.props[i].ID)
{
players->bag.props[i].stock++;
}
}
if (i==players->bag.count)
{
int id = players->bag.count;
players->bag.props[id].ID=tradeprop->ID;
players->bag.props[id].price=tradeprop->price;
players->bag.props[id].stock=1;
strcpy(players->bag.props[id].name,tradeprop->name);
strcpy(players->bag.props[id].desc,tradeprop->desc);
players->bag.count++;
}
*/
}
void chakanbag()
{
printf ("背包\n");
printf ("%-4s%-12s%s\t\t%s","编号","名称","数量","描述\n");
for (int i;i<players[0].bag.count;i++)
{
printf("%d%s%d%s\n",players[0].bag.props[i].ID,players[0].bag.props[i].name,players[0].bag.props[i].stock,players[0].bag.props[i].desc);
}
下面是加上那句代码的图片
2019年04月14日 06点04分 1
level 7
我运行好像没问题
2019年04月14日 06点04分 2
level 7
不好意思😣
2019年04月14日 07点04分 3
你注释那条代码看看效果
2019年04月14日 07点04分
level 13
为什么要在这里加上数组的大小
typedef struct _bag// 背包结构体
{
int playerID;
int count;// 道具数量
int max;// 道具插槽总数
Prop props[3];// 商店数组 bug修复指定数组大小
} Bag;
只有指定了数组大小
players[0].bag.props[id].ID=tradeprop->ID;
// 这条代码里的赋值才能赋值给players指针的的真实地址,因为它有props的对应的内存,可以赋值
2019年04月14日 13点04分 5
谢谢大佬解答,不然我都不知道为什么出错
2019年04月15日 08点04分
level 7
我把你的typedef struct _bag// 背包结构体
{
int playerID;
int count;// 道具数量
int max;// 道具插槽总数
Prop props[8];// 这里改成固定下标就没有错误了
} Bag;
2019年04月14日 14点04分 6
谢谢大佬的解答
2019年04月15日 08点04分
level 7
结构体本来就跟数组类似,一级可以没有下标。二级以上必须有下标。好像是这样。接受现实吧。反正背包数最大8直接物品描述数组就用固定下标吧😄
2019年04月14日 14点04分 7
没学过什么1级2级的,不过现在涨见识了
2019年04月15日 08点04分
是维,哈哈😄我确实没学过。
2019年04月19日 06点04分
你们应该好好学。我无所谓啦。
2019年04月19日 06点04分
level 7
为啥😳刚才没有楼上的答案?我的发上去原来有答案了。
2019年04月14日 14点04分 8
level 7
哼😏不开心(;_;)
2019年04月14日 14点04分 9
level 6
修改一下吧
2019年04月15日 06点04分 10
level 6
咋不用类来写
2019年04月15日 06点04分 11
我不知道类是啥啊
2019年04月15日 08点04分
@懂学的小鸟 类也是一种数据结构,也相当于结构体。
2019年04月15日 09点04分
@贴吧用户_5VVKW46 其实两者差不多,只是类有成员函数和构造函数,还有访问权限。类你没有上诉的,只有成员属性,就相当于结构体,
2019年04月15日 09点04分
@贴吧用户_5VVKW46 :其实两者差不多,只是类有成员函数和构造函数,还有访问权限。类你没有上诉的,只有成员属性,就相当于结构体,
2019年04月15日 09点04分
1