Strukturen in Strukturen
Ein Member einer Struktur kann jeden Typ haben, auch ein Array oder eine andere Struktur. Das hast du mit jedem char name[20] schon gemacht: Das ist ein Array in einer Struktur. Ein Array von Zahlen funktioniert genauso. Und wenn mehrere Werte in einer Struktur zusammengehören, etwa Tag, Monat und Jahr eines Datums, kannst du daraus eine eigene Struktur machen:
typedef struct {
int tag;
int monat;
int jahr;
} Datum;
typedef struct {
char name[20];
Datum geburtstag;
int punkte[3];
} Spieler;Ein Spieler einer Basketballmannschaft hat einen Namen, einen Geburtstag vom Typ Datum und die Punkte aus seinen letzten drei Spielen. Datum muss über Spieler definiert sein: Der Compiler liest das Programm von oben und muss Datum kennen, wenn er zum Member geburtstag kommt.
Wenn du einen Spieler anlegst, bekommen die innere Struktur und das innere Array jeweils ihre eigenen geschweiften Klammern:
Spieler eva = {"Eva", {14, 3, 2011}, {12, 8, 15}};Um an einen inneren Wert zu kommen, verkette die Punkte und eckigen Klammern und lies sie von links nach rechts. eva.geburtstag ist ein ganzes Datum, also ist eva.geburtstag.jahr sein Jahr. eva.punkte ist ein Array, also ist eva.punkte[0] sein erstes Element:
printf("%s wurde %d geboren.\n", eva.name, eva.geburtstag.jahr);
printf("Punkte im ersten Spiel: %d\n", eva.punkte[0]);Das gibt aus:
Eva wurde 2011 geboren.
Punkte im ersten Spiel: 12Durch das innere Array gehst du mit einer Schleife, wie durch jedes andere Array:
int summe = 0;
for (int i = 0; i < 3; i++) {
summe += eva.punkte[i];
}
printf("Punkte insgesamt: %d\n", summe);Das gibt aus:
Punkte insgesamt: 35Wenn du einen Schritt der Kette überspringst, wie in eva.jahr, sagt dir der Compiler, dass ein Spieler keinen Member jahr hat. Er hat recht: Das Jahr ist ein Member von Evas Geburtstag, nicht von Eva.
main.c:17:52: error: no member named 'jahr' in 'Spieler'So schreibst du es:
Anweisungen
- 1
Zara, die Heldin eines Spiels, geht drei Schritte nach rechts. Addiere unter dem
printf3zumxihrer Position:xist ein Member vonposition, undpositionist ein Member vonzara. Gib ihre Position dann alsPosition: 5, 5aus und lies beide Zahlen aus den Membern. - 2
Zara hat in drei Leveln des Spiels Münzen gesammelt, und sie stehen im Array
muenzen. Addiere sie am Ende vonmain(vorreturn 0;) mit einer Schleife auf und gibMünzen: 21aus.