問題主要是在購買商品上,我是直接讓一號玩家去購買三號商品,金幣是夠的為什么會顯示一個-0呢,而且商品數量也減少了啊
求解答,謝謝
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*商品結構*/
typedef struct _prop{
int id; //道具編號
char name[50]; //道具名稱
double price; //道具單價
int stock; //庫存量
char desc[200];//道具描述
}Prop;
/*背包結構*/
typedef struct _bag{
int playerId; //玩家編號
int count; //背包中道具數量
int max; //可容納道具總數
Prop props[]; //道具陣列
}Bag;
/*玩家結構*/
typedef struct _player{
int id; //玩家編號
char name[50]; //用戶名
char pass[50]; //密碼
Bag bags; //玩家背包
double gold; //玩家金幣
double sysee; //元寶數量
}Player;
Prop *props;
Player *players;
int propsCount,playersCount;
void ShowProps();
void ShowPlayers();
void Init();
void Trade();
int main()
{
Init();
printf("\n交易前********************************\n");
ShowProps();
ShowPlayers();
Trade(&players[0],3);
printf("\n\n交易后********************************\n");
ShowProps();
ShowPlayers();
return 0;
}
void Trade(Player *player, int propId)
{
int i;
Prop *tradeProp = NULL;
for(i = 0; i < propsCount; i++)
{
if(propId == props[i].id)
{
tradeProp = &props[i];
break;
}
}
if(tradeProp->stock <= 0)
{
printf("商店已經被賣空!");
return;
}
if(player->gold < tradeProp->price)
{
printf("錢包已空!");
return;
}
if(player->bags.count >= player->bags.max && player->bags.count != 0)
{
printf("背包已滿,交易失敗!");
}
tradeProp->stock--;
players->gold -= tradeProp->price;
for(i = 0; i < player->bags.count; i++)
{
if(propId == player->bags.props[i].id)
{
player->bags.props[i].stock++;
break;
}
}
if(i == player->bags.count)
{
int newIndex = player->bags.count;
player->bags.props[newIndex].id = tradeProp->id;
player->bags.props[newIndex].price = tradeProp->price;
player->bags.props[newIndex].stock = 1;
strcpy(player->bags.props[newIndex].name,tradeProp->name);
strcpy(player->bags.props[newIndex].desc,tradeProp->desc);
player->bags.count++;
}
}
void Init()
{
//1-初始化資料
static Prop propArray[] = {
{1,"經驗卡",3000,10,"雙擊666"},
{2,"斬神刀",113000,2,"nb"},
{3,"陰影服",8000,8,"看不到我"},
{4,"九頭蛇",10000,3,"散射"},
{5,"光甲",9000,6,"硬質防御"},
};
propsCount = sizeof(propArray) / sizeof(Prop);
props = propArray;
static Player playerArray[] = {
{1,"幾事","123456",.gold=10000,.bags.max = 8},
{2,"無趣","123456",.gold=100000,.bags.max = 8},
{3,"第一","123456",.gold=150000,.bags.max = 8}
};
playersCount = sizeof(playerArray) /sizeof(Player);
players = playerArray;
}
void ShowProps()
{
int i;
if (props == NULL)return;
printf("編號\t名稱\t單價\t庫存\t商品介紹\n");
for(i = 0; i < propsCount; i++)
{
printf("%-5d\t%s\t%-7.0lf\t%d\t%s\n",props[i].id,props[i].name,props[i].price,props[i].stock,props[i].desc);
}
}
void ShowPlayers()
{
int i;
if(players == NULL) return;
printf("編號\t%-14s金幣\n","名稱");
for(i = 0; i < playersCount; i++)
{
printf("%d\t%-14s%.0lf\n",players[i].id,players[i].name,players[i].gold);
}
}

uj5u.com熱心網友回復:
Prop props[]; //道具陣列
問題在這里,Init的時候沒有對其申請空間不賦值,這里的props是一個指標,在Init里被賦值為NULL,沒有指向什么內容。
uj5u.com熱心網友回復:
購買完后,再次列印出來,商品的部分沒有出錯啊,是玩家的金幣出現了問題uj5u.com熱心網友回復:

這里不是指向了這個定義出來的陣列了嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225731.html
標籤:C語言
上一篇:求幫忙
