Eine Struktur zurückgeben
Eine Funktion kann auch eine Struktur zurückgeben. return gibt nur einen Wert zurück, aber dieser eine Wert kann mehrere Member haben. In der Lektion über Zeiger hat eine Funktion zwei Ergebnisse über zwei Zeigerparameter zurückgegeben. Mit einer Struktur ist es oft einfacher: Lege die Ergebnisse in eine Struktur und gib sie zurück. Diese Funktion macht aus einer Anzahl von Sekunden Minuten und Sekunden:
#include <stdio.h>
typedef struct {
int minuten;
int sekunden;
} Zeit;
Zeit aus_sekunden(int gesamt) {
Zeit ergebnis;
ergebnis.minuten = gesamt / 60;
ergebnis.sekunden = gesamt % 60;
return ergebnis;
}
int main(void) {
Zeit lauf = aus_sekunden(1000);
printf("%d min %d s\n", lauf.minuten, lauf.sekunden);
return 0;
}Das gibt aus:
16 min 40 sDer Rückgabetyp vor dem Namen der Funktion ist Zeit. Die Funktion legt eine lokale Variable ergebnis an, füllt ihre Member aus und gibt sie zurück. Wie bei Parametern wird die Struktur kopiert: lauf in main bekommt eine Kopie von ergebnis, und ergebnis selbst verschwindet, wenn die Funktion endet, wie jede lokale Variable. Du könntest ergebnis auch gleich mit seinen Werten anlegen: Zeit ergebnis = {gesamt / 60, gesamt % 60};.
Eine Funktion kann auch eine der Strukturen aus einem Array zurückgeben, das sie bekommt. return artikel[i]; gibt eine Kopie dieses Elements zurück. Eine Zuweisung funktioniert genauso: guenstig = artikel[i]; kopiert die ganze Struktur in die Variable guenstig, alle ihre Member auf einmal. So findest du in der Aufgabe unten das günstigste Produkt: Merke dir das erste Produkt, und wenn ein günstigeres kommt, merke dir stattdessen dieses.
So schreibst du es:
Anweisungen
- 1
Schreibe über
maineine FunktionProdukt guenstigstes(const Produkt artikel[], int anzahl), die das günstigste Produkt im Array zurückgibt. - 2
Rufe unter der Schleife in
maindie Funktion auf und speichere, was sie zurückgibt:Produkt guenstig = guenstigstes(regal, 4);. Gib dannGünstigstes: Joghurt (0.79)aus, mit dem Namen und dem Preis ausguenstig. - 3
Schreibe noch eine Funktion,
Produkt mit_rabatt(Produkt artikel, int prozent), die das Produkt mit einem umprozentProzent gesenkten Preis zurückgibt. Sie bekommt eine Kopie, kann also den Preis der Kopie ändern und sie zurückgeben; das Original bleibt, wie es war. (Achtung:prozent / 100ist eine Division von Ganzzahlen.) Rufe sie am Ende vonmainmitguenstigund10auf und gib den alten und den neuen Preis aus:Joghurt: 0.79 -> 0.71.