Member
Ein Member einer Struktur funktioniert wie eine gewöhnliche Variable: Du kannst ihn lesen, damit rechnen und ihn ändern. Du musst nur sagen, wessen Member er ist. brot.anzahl ist die Anzahl des Brots, nicht der Milch. Dieses Programm ändert die Member des Brots und rechnet mit ihnen:
#include <stdio.h>
#include <string.h>
struct produkt {
char name[20];
double preis;
int anzahl;
};
int main(void) {
struct produkt brot = {"Brot", 3.5, 2};
brot.anzahl = 3;
brot.preis -= 0.5;
printf("%s: %d x %.2f = %.2f\n", brot.name, brot.anzahl, brot.preis, brot.anzahl * brot.preis);
strcpy(brot.name, "Brötchen");
printf("%s: %d x %.2f\n", brot.name, brot.anzahl, brot.preis);
return 0;
}Das gibt aus:
Brot: 3 x 3.00 = 9.00
Brötchen: 3 x 3.00brot.anzahl = 3; speichert einen neuen Wert im Member anzahl, und brot.preis -= 0.5; senkt den Preis um 0.5. Die anderen Member bleiben, wie sie waren. Alles, was du über Variablen weißt, funktioniert auch mit Membern: +=, ++ oder eine Bedingung wie if (brot.anzahl > 0).
Ein Text-Member ist anders, denn er ist ein Array, und einem Array kannst du nicht mit = etwas zuweisen. Wenn du statt der strcpy-Zeile brot.name = "Brötchen"; schreibst, lässt sich das Programm nicht kompilieren:
main.c:16:15: error: array type 'char[20]' is not assignable
16 | brot.name = "Brötchen";
| ~~~~~~~~~ ^Deshalb kopiert das Programm den Text mit strcpy aus string.h hinein, wie in jede Zeichenkette. Das Array muss Platz für den neuen Text und für das '\0' an seinem Ende haben: char name[20] hat Platz für bis zu 19 Zeichen.
Achte auch auf Tippfehler in den Namen der Member. Der Compiler kennt nur die Member aus der Definition, also endet brot.preiss mit einem Fehler, der sagt, dass die Struktur keinen solchen Member hat:
main.c:17:60: error: no member named 'preiss' in 'struct produkt'
17 | printf("%s: %d x %.2f\n", brot.name, brot.anzahl, brot.preiss);
| ~~~~ ^So schreibst du es:
Anweisungen
- 1
Der Held eines Spiels kämpft gegen einen Drachen. Senke anstelle des Kommentars
held.lebenmit-=um35und erhöheheld.levelum eins. Gib darunter den Helden noch einmal mit demselbenprintfwie oben aus. Das Programm gibtZara: Level 1, Leben 100und darunterZara: Level 2, Leben 65aus. - 2
Für den Sieg über den Drachen bekommt der Held einen neuen Namen. Kopiere am Ende von
main(vorreturn 0;) den TextZara die Mutigemitstrcpyinheld.name(füge oben#include <string.h>hinzu) und gib den Helden noch einmal aus. Die letzte Zeile istZara die Mutige: Level 2, Leben 65.