Arrays von Strukturen
Stell dir eine Liste von Bergen vor, jeder mit einem Namen und einer Höhe. Ein Berg ist eine Struktur. Um mehrere davon aufzubewahren, weißt du schon, was du verwenden kannst: ein Array. Eine Struktur ist ein Typ wie jeder andere, also kannst du ein Array von Strukturen anlegen:
#include <stdio.h>
typedef struct {
char name[20];
int hoehe;
} Berg;
int main(void) {
Berg berge[3] = {
{"Everest", 8849},
{"K2", 8611},
{"Lhotse", 8516}
};
for (int i = 0; i < 3; i++) {
printf("%-8s %5d m\n", berge[i].name, berge[i].hoehe);
}
return 0;
}Das gibt aus:
Everest 8849 m
K2 8611 m
Lhotse 8516 mJedes Element des Arrays wird als eigene Struktur in geschweiften Klammern geschrieben, und die Elemente werden durch Kommas getrennt, wie in jedem Array. berge[0] ist der ganze erste Berg, der Everest. berge[i].name liest man von links nach rechts: Zuerst nimm das Element i des Arrays, dann seinen Member name.
Ein typischer Fehler ist, die Reihenfolge zu vertauschen und berge.name[i] zu schreiben. Das bedeutet „der Member name des Arrays berge“, aber ein Array hat keine Member, nur Elemente:
main.c:16:37: error: member reference base type 'Berg[3]' is not a structure or union
16 | printf("%-8s %5d m\n", berge.name[i], berge[i].hoehe);
| ~~~~~^~~~~Die Meldung sagt, dass das, was vor dem Punkt steht, vom Typ Berg[3] (ein Array aus drei Bergen), keine Struktur ist. (Eine union ist etwas Ähnliches wie eine Struktur, das dieser Kurs nicht verwendet.)
Wie in der Lektion über Zeichenketten legt das printf in der Schleife die Breite jeder Spalte fest, damit die Spalten untereinander stehen. %-8s gibt den Text in einer 8 Zeichen breiten Spalte linksbündig aus (das bewirkt das -), und %5d gibt die Zahl in einer 5 Zeichen breiten Spalte rechtsbündig aus. Bei Dezimalzahlen bedeutet %6.2f 2 Nachkommastellen und eine Gesamtbreite von 6 Zeichen.
Statt die Anzahl 3 in die Schleife zu schreiben, kannst du sie wie bei jedem Array vom Programm berechnen lassen: const int ANZAHL = sizeof(berge) / sizeof(berge[0]); Die Größe des ganzen Arrays geteilt durch die Größe eines Elements ist die Anzahl der Elemente, egal was die Elemente sind.
So schreibst du es:
Anweisungen
- 1
Das Programm gibt nur das erste Produkt im Warenkorb aus. Ersetze das
printfdurch einefor-Schleife, die jedes Produkt auf dieselbe Weise ausgibt. Das Programm gibt aus:Brot 3.50 x 2 Milch 1.20 x 3 Orangen 0.80 x 6 - 2
Gib unter der Schleife aus, was der ganze Warenkorb kostet. Multipliziere für jedes Produkt seinen Preis mit seiner Anzahl und addiere die Ergebnisse; du kannst das in derselben Schleife machen oder in einer neuen. Gib das Ergebnis mit 2 Nachkommastellen aus:
Gesamt: 15.40.