天敌521 发表于 2021-4-14 10:35:42

结构体初学问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Martial
{
    int id; //门派id
    char name;//门派名称
    char count;//门派人数
    char type; //门派类别 1正派 2中立 3邪派
}martial = {1,"德玛西亚",100,1};
struct player
{
    int id;//玩家的id
    char name;//玩家的名称
    char pass;//玩家的密码
    char sex;//玩家性别
    struct Martial martial;//玩家所属门派
};
int main()
{
    struct player player = {1,"小彪",1236,'f'};
    printf("%s\n",player.martial.name);
    return 0;
}
最后提取不出来门派的名称

yuxijian2020 发表于 2021-4-14 11:22:26

本帖最后由 yuxijian2020 于 2021-4-14 11:28 编辑

因为你没有给player结构体中的门派赋值

最好是重新弄个方法用于给player对象赋值

void InitPlayer(struct player* p, int id, char* name, char* pass, char sex, int mId, char* mName, char count, char type)
{
    p->id = id;
    strcpy_s(p->name, sizeof(p->name) / sizeof(char), name);
    strcpy_s(p->pass, sizeof(p->pass) / sizeof(char), pass);
    p->sex = sex;

    p->martial.id = mId;
    strcpy_s(p->martial.name, sizeof(p->martial.name) / sizeof(char), mName);
    p->martial.count = count;
    p->martial.type = type;
}

天敌521 发表于 2021-4-14 11:53:14

yuxijian2020 发表于 2021-4-14 11:22
因为你没有给player结构体中的门派赋值

最好是重新弄个方法用于给player对象赋值

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Martial
{
    int id; //门派id
    char name;//门派名称
    char count;//门派人数
    char type; //门派类别 1正派 2中立 3邪派
};
struct player
{
    int id;//玩家的id
    char name;//玩家的名称
    char pass;//玩家的密码
    char sex;//玩家性别
    struct Martial martial;//玩家所属门派
};
int main()
{
    struct player player = {1,"小彪",1236,'f',{1,"德玛西亚",100,1}};
    printf("%s\n",player.martial.name);
    return 0;
}
可就算我给他赋值也是提取不出来

天敌521 发表于 2021-4-14 11:53:49

yuxijian2020 发表于 2021-4-14 11:22
因为你没有给player结构体中的门派赋值

最好是重新弄个方法用于给player对象赋值

编译器也没报错

yuxijian2020 发表于 2021-4-14 11:55:12

天敌521 发表于 2021-4-14 11:53
编译器也没报错

c/c++编译器不报错的多了,结构体中的结构体不能像你这样直接赋值,它找不到的...

yuxijian2020 发表于 2021-4-14 11:59:41

天敌521 发表于 2021-4-14 11:53
编译器也没报错

忘记说了,你这种写法在我vs2019上是报错的

人造人 发表于 2021-4-14 12:01:32

yuxijian2020 发表于 2021-4-14 11:59
忘记说了,你这种写法在我vs2019上是报错的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Martial
{
    int id; //门派id
    char name;//门派名称
    char count;//门派人数
    char type; //门派类别 1正派 2中立 3邪派
};
struct player
{
    int id;//玩家的id
    char name;//玩家的名称
    char pass;//玩家的密码
    char sex;//玩家性别
    struct Martial martial;//玩家所属门派
};
int main()
{
    struct player player = {1,"小彪","1236",'f',{1,"德玛西亚",100,1}};
    printf("%s\n",player.martial.name);
    return 0;
}

天敌521 发表于 2021-4-14 12:02:57

yuxijian2020 发表于 2021-4-14 11:59
忘记说了,你这种写法在我vs2019上是报错的

好的谢谢解答

天敌521 发表于 2021-4-14 12:03:43

天敌521 发表于 2021-4-14 12:02
好的谢谢解答

我换一种写法指针还不是太熟练

天敌521 发表于 2021-4-14 12:46:28

人造人 发表于 2021-4-14 12:01


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Martial
{
    int id; //门派id
    char name;//门派名称
    char count;//门派人数
    char type; //门派类别 1正派 2中立 3邪派
};
struct player
{
    int id;//玩家的id
    char name;//玩家的名称
    char pass;//玩家的密码
    char sex;//玩家性别
    struct Martial martial;//玩家所属门派
};
int main()
{
    struct player player = {1,"小彪","123456",'f'};
    player.martial.id = 1;
    strcpy(player.martial.name,"天山");
    strcpy(player.martial.count,"300");
    player.martial.type = 3;
    printf("%s\n",player.martial.name);
    return 0;
}
换了种赋值方式总算出来了
你的解答我学到后面会再看一看

yuxijian2020 发表于 2021-4-14 13:05:40

天敌521 发表于 2021-4-14 12:46
#include
#include
#include


你看一下7楼的回答,你是赋值的时候pass是字符串但是你赋值成int了,所以才报错{:10_247:}

yuxijian2020 发表于 2021-4-14 13:06:47

人造人 发表于 2021-4-14 12:01


我眼瞎了我就说咋能报错呢,他属性赋值就不对{:10_247:}

天敌521 发表于 2021-4-14 18:22:50

人造人 发表于 2021-4-14 12:01


感谢感谢 粗心了

天敌521 发表于 2021-4-14 18:30:35

yuxijian2020 发表于 2021-4-14 13:05
你看一下7楼的回答,你是赋值的时候pass是字符串但是你赋值成int了,所以才报错

感谢感谢
页: [1]
查看完整版本: 结构体初学问题