2017-03-17 93 views
0
struct date{ 
    int month; 
    int day; 
    int year; 
}; 
struct employee{ 
    struct nmadtype nameaddr; 
    int salary; 
    struct date datehired; 
}; 
struct employee e[3]; 
for(i=0;i<3;i++) 
struct employee e[i].datehired={2,2,16}; 

我想初始化員工日期上,他們僱用通過datehired可變的,但我不想單獨初始化結構日期的每個成員(如E [I] .datehired.month = 2),所以我試圖在最後一步,但它給編譯錯誤,所以PLZ建議一種方法,如果我的3名僱員有不同的僱用日期,甚至會工作。如何初始化嵌套結構變量?

回答

3

你試圖做的是分配,不是初始化,這就是爲什麼它的失敗。在定義變量時完成初始化。

你可以做的是使用文字的化合物:

e[i].datehired = (struct date){2, 2, 16}; 

這將創建struct date類型的臨時變量並賦予其價值成員明智的賦值的左側。

+0

感謝解決我的問題是一個偉大而短暫的解決方案 –

0

您可以使用struct date變量,初始化值,這樣做:

#include <stdio.h> 

struct date{ 
    int month; 
    int day; 
    int year; 
}; 

struct employee{ 
    struct date datehired; 
}; 

int main(void) 
{ 
    struct employee e[3]; 
    struct date initVal= {2,2,16}; 

    for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++){ 
     e[i].datehired=initVal; 
    } 
} 

或者使用Compound Literals

#include <stdio.h> 

struct date{ 
    int month; 
    int day; 
    int year; 
}; 

struct employee{ 
    struct date datehired; 
}; 

int main(void) 
{ 
    struct employee e[3]; 

    for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++){ 
     e[i].datehired=(struct date){2,2,16};; 
    } 
} 

而且最簡單和基本的代碼

#include <stdio.h> 

struct date{ 
    int month; 
    int day; 
    int year; 
}; 

struct employee{ 
    struct date datehired; 
}; 

int main(void) 
{ 
    struct employee e[3]; 

    for(size_t i=0;i<sizeof(e)/sizeof(e[0]);i++) 
    { 
     e[i].datehired.month = 2; 
     e[i].datehired.day = 2; 
     e[i].datehired.year = 16; 
    } 
}