结果传递给函数

时间:2015-12-17 19:28:03

标签: c printing struct

#include <stdio.h>
struct Item
{
    int type;
    int power;
    char name[20];
};

struct Player
{
    int level;
    int str;
    int speed;
    int def;
    int intel;
    int luck;
    int hp;
    char name[20];

};
struct Item loadItem();
struct Player loadPlayer();
struct Item loadItem();

int main()
{
    struct Player player1 = loadPlayer();
    struct Item itemList[2];
    itemList[1]=loadItem();
    itemList[2]=loadItem();

    printData(&player1,itemList,2);

//player1 = loadPlayer();

}

struct Item loadItem()

{
    struct Item item;

printf("Please Enter the following item info:\n");
printf("Name: ");
scanf("%s",&item.name);
printf("Type: ");
scanf("%d",&item.type);
printf("Power: ");
scanf("%d",&item.power);
printf("\n");

return item;

}

struct Player loadPlayer()

{
    struct Player player;
 printf("Please enter the following player info:\nName: ");
 scanf("%[^\n]",&player.name);
 printf("Level: ");
 scanf("%d",&player.level);
 printf("Strength: ");
 scanf("%d",&player.str);
 printf("Speed: ");
 scanf("%d",&player.speed);
 printf("Defense: ");
 scanf("%d",&player.def);
 printf("Intelligence: ");
 scanf("%d",&player.intel);
 printf("Luck: ");
 scanf("%d",&player.luck);
 printf("Max HP: ");
 scanf("%d",&player.hp);
 printf("\n");

 return player;
}

void printData(struct Player player1, struct Item itemList[], int listsize)

{
    int i = 0;

printf("Collected Input: \n");
printf("Name\t Lvl Str Spd Def Int Lck MHP\n");
printf("%s\t %d %d %d %d %d %d %d",player1.name,player1.level,player1.str,player1.speed,player1.def,player1.intel,player1.luck,player1.hp);

printf("\n\n");

 printf("Name\t Type Power");
for(i=0;i++;i<listsize)
    printf("%s\t %d %d",itemList[i].name,itemList[i].type,itemList[i].power);

    return;}

/ *** struct Item loadItem():此函数定义Item类型的变量。功能, 提示用户输入项目  名称,项目类型和项目权力,  将值存储在Item类型的变量中并返回它。

struct Player loadPlayer():此函数定义Player类型的变量。 该函数提示用户输入已定义变量的所有必需属性 (等级,力量,速度,防御,情报,运气,最大HP,当前HP和名称)。 然后,此函数使用输入填充已定义的变量并返回结构。

void printData(struct Player p1,struct Item itemList [],int listSize):     此函数采用struct Player p1类型的变量,这是struct Item itemList []的数组,     和一个整数listSize,表示itemList中的项目数。     此函数显示p1的所有信息以及itemList项目列表的所有信息。 *** /

在这个程序中,我创建了两个结构类型,播放器和项目。然后我初始化一个玩家和两个项目。我遇到的问题是将信息传递给printData函数并尝试将其打印到屏幕时,值不是我保存到每个对象的值。请随意编译此代码并建议和更改,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

struct Item itemList[2];
itemList[1]=loadItem();
itemList[2]=loadItem();

必须是

itemList[0]=loadItem();
itemList[1]=loadItem();

数组是C中的0原点。

此外:

struct Player player1 = loadPlayer();
/* ... */
printData(&player1,itemList,2);

您将指向printData中的结构对象的指针作为其第一个参与者传递,但您的函数声明是:

void printData(struct Player player1, struct Item itemList[], int listsize)

也就是说,您的第一个参数是结构对象,而不是指向结构对象的指针。