2017-03-17 3 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}; 

Ich möchte Mitarbeiter initialisieren Tag, an dem sie durch datehired Variable eingestellt, aber ich möchte nicht jedes Mitglied struct Datum einzeln initialisieren (wie e [i] .datehired.month = 2), so habe ich versucht, den letzten Schritt aber Es gibt Kompilierungsfehler, also empfehlen Sie bitte eine Methode, die sogar funktioniert, wenn meine 3 Angestellten ein anderes Einstellungsdatum haben.Wie verschachtelte Strukturvariablen initialisiert werden?

Antwort

3

Was sind versucht, Sie zu tun, ist eine Zuordnung, kein Initialisierung, weshalb es versagt. Eine Initialisierung erfolgt zu dem Zeitpunkt, an dem eine Variable definiert wird.

Was Sie tun können, ist eine Verbindung verwenden wörtliche:

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

Dies erzeugt eine temporäre Variable vom Typ struct date und ordnet seine Werte Mitglied weise auf der linken Seite der Zuweisung.

+0

Dank für die Lösung Mein Problem ist eine großartige und kurze Lösung –

0

Sie können eine struct date Variable mit init-Werte verwenden, dies zu tun:

#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; 
    } 
} 

Oder 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};; 
    } 
} 

mit Und die einfachste und grundlegende Code

#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; 
    } 
} 
Verwandte Themen