【问题标题】:How to use a union along with two structs + more如何使用联合和两个结构 + 更多
【发布时间】:2015-02-19 00:11:31
【问题描述】:

我的作业有问题,希望能得到一些帮助。

我假设有两个结构,志愿者和雇员,以及一个以名字、姓氏、电话号码 + 志愿者或雇员作为结构的工会“人”。

我以前有过使用联合 + 结构的经验,但我想在联合中有更多信息。我想知道如何正确设置它,这就是我到目前为止所拥有的。

typedef struct volunteer{
    int hours;
    int tasksCompleted;
}student;

typedef struct employee{
    float salary;
    int serviceYears;
    int level;
}employee;

typedef union person{
    char firstName[20];
    char familyName[20];
    char telephoneNum[10];
    //employee e;
    //volunteer;
}person;

任何帮助都会很棒。这是我坚持的任务指令。

创建一个包含以下公共记录的人员记录:名字、姓氏和电话,以及志愿者和员工记录之间的结合。确保添加一个字段以区分员工或志愿者两种记录类型。

【问题讨论】:

  • 阅读说明:union between the volunteer and employee record
  • 任何自称有工会经验的人,然后工会的名字、姓氏和电话号码都应该审核他们的所有代码。

标签: c struct unions


【解决方案1】:

我认为你想多了:你需要一个结构来代表人。关键部分是

“以及志愿者和员工记录之间的结合。”

typedef enum { employee_person, volunteer_person }  person_type;
typedef struct person{
    char firstName[20];
    char familyName[20];
    char telephoneNum[10];
    person_type type;
    union {
        struct employee employee;
        struct volunteer volunteer;
    };
}person;

【讨论】:

  • 我对你想说什么感到困惑。你是说我最初的回答是假设员工 && 志愿者是 typedef 的,还是我应该包括 OP 的结构定义? (感谢您指出疏忽顺便说一句!)
  • 感谢您的帮助。想知道如何正确访问信息。我用person test = {"George", "Michaels","654456123", 10, 5000.22, 3}; 初始化并尝试用printf("The gpa is %d\n", test.s.gpa); 访问gpa,我收到的是内存地址而不是值。
  • @user1692517 根据您的结构定义,没有字段 s 或 gpa,所以我无法帮助您解决确切的问题。我假设您有一个 student 定义,其中包含一个名为 gpa 的字段,并且是字段 s。如果您在某处发布您的结构声明和代码的简化示例,我将很乐意提供帮助。 (PS如果你觉得答案有帮助,请点赞;)。
【解决方案2】:

这应该满足你的要求:

typedef struct volunteer {
    int hours;
    int tasksCompleted;
} student;

typedef struct employee {
    float salary;
    int serviceYears;
    int level;
} employee;

struct person {
    char firstName[20];
    char familyName[20];
    char telephoneNum[10]; 
    bool is_employee;
    union {
        employee e;
        student s;
    } info;
} person;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2022-07-30
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多