【问题标题】:How do I initialize a struct containing another struct?如何初始化包含另一个结构的结构?
【发布时间】:2020-03-18 14:36:36
【问题描述】:

我是新手,我尝试在 C 代码上创建一个结构结构。我不明白如何初始化结构的结构。有人帮我吗? 我有:

#define SIZEHOSP 200
#define DIM 200
#define SIZESICK 2000



typedef struct SICKREGION {
    char firstName[20];
    char lastName[20];
    char fiscalCode[16];
    enum stateSick;
    diagnosisDate data;
    healingDate dataH;
};

typedef struct HOSPITAL {
    char nameHospital[30];
    int codeHospital;
    char addressHospital[40];
    char departmentManager[30];
    int beds;
    int bedsIntensiveCare;
};

HOSPITAL hospital[SIZEHOSP];

typedef struct REGION {
    char nameRegion[20];
    int codeRegion;
    char MainTownRegion[15];
    char namePresidentRegion[20];
    int numberHospital;
    int numberSickRegion;
    HOSPITAL hospital[SIZEHOSP];
    SICKREGION sickregion[SIZESICK];
};

REGION region[DIM] = {
    {"Sicilia", 0004, "Palermo", "Musumeci", 40, 150},
    {"sardegna", 4444, "cagliari", "pippo", 200, 50},
    {"calabria", 0000, "reggio", "Josh", 12, 18}
};

例如,我初始化了 3 种类型的 REGION。但它们不完整,因为我不知道如何将结构 HOSPITAL 和 SICKREGION 的值插入区域 [DIM] 内。语法是什么?我希望他能很好地解释这个问题。

【问题讨论】:

  • 使用嵌套的{} 来初始化结构元素,例如{1, 2, {3, 4}, 5}.
  • 尽管初始化,此代码仍无法编译。贴出实际代码。
  • @Alberto Torrisi This typedef struct diagnosticDate,healingDate{ unsigned int day;字符月[20];无符号整数年;};不正确,没有意义。
  • 好的,谢谢。以及我如何打印变量区域[0]?
  • 好吧,伙计们,我做到了:D 花了很多时间来打印结构......谢谢大家的快速回复!我希望将来成为一名专业开发人员以帮助社区:)

标签: c struct typedef


【解决方案1】:

如何初始化包含另一个结构的结构?

有几种方法可以初始化一个结构。为简化起见,以下示例使用比您提供的更小的结构...

下面将说明使用值 (= {,,,{,,}};) 进行初始化,然后使用零 = {0} 进行初始化:

typedef struct {
    int count;
    float cash;
    char item[50];
}Purchase;

typedef struct {
    int accnt;
    char acct_name[50];
    Purchase purch;
} Acct;

Acct acct = {100123, "Robert Baily", {15, 12.50, "Tires"}};
//Or, using member names to self document the initialization statement as suggested in comments:
Acct acct1 = Acct acct = {.accnt=100123, .acct_name="Robert Baily", {.count=15, .cash=12.50, .item="Tires"}};

Acct acct2 = {0};

int main(void)
{
    printf("acct = %d\nAcct_name = %s\nitem = %s\ncount = %d\ncash = %3.2f\n", acct.accnt, acct.acct_name, acct.purch.item, acct.purch.count, acct.purch.cash);
    printf("acct2 = %d\nAcct_name = %s\nitem = %s\ncount = %d\ncash = %3.2f\n", acct2.accnt, acct2.acct_name, acct2.purch.item, acct2.purch.count, acct2.purch.cash);
    return 0;
}   

虽然这些很小,但它们说明了您正在使用更大、更复杂的结构做什么。我建议对于您的结构,这将非常乏味,并且可能没有必要使用第一种方法。实际程序中的struct 声明通常通过归零来初始化。即{0}

【讨论】:

  • 我更喜欢= {.accnt = 100123 ... 以避免愚蠢的错误\
  • @P__J__ - 提供一个示例,作为结构成员的成员的char [] 变量会是什么样子。例如acct.purch.item = "Tires" 不起作用。
  • @P__J__ - 如果我的编辑解决了您的问题,我们可以清理 cmets 吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2013-04-16
  • 2013-01-25
  • 2015-05-04
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
相关资源
最近更新 更多