return beendet die Funktion
return tut zwei Dinge auf einmal: Es gibt einen Wert zurück, und es beendet die Funktion sofort. Der Rest der Funktion läuft nicht mehr:
#include <stdio.h>
int addiere(int a, int b) {
return a + b;
printf("Diese Zeile läuft nie.\n");
}
int main(void) {
printf("%d\n", addiere(2, 3));
return 0;
}Dieses Programm gibt aus:
5Die Zeile nach return läuft nie, weil die Funktion schon beendet ist.
Das ist zusammen mit Bedingungen praktisch. Diese Funktion gibt die größere von zwei Zahlen zurück:
#include <stdio.h>
int maximum(int a, int b) {
if (a > b) {
return a;
}
return b;
}
int main(void) {
printf("%d\n", maximum(7, 3));
printf("%d\n", maximum(2, 9));
return 0;
}Dieses Programm gibt aus:
7
9Bei maximum(7, 3) ist die Bedingung 7 > 3 wahr, also gibt die Funktion 7 zurück und endet genau dort: Die letzte Zeile läuft nicht. Bei maximum(2, 9) ist die Bedingung falsch, der Rumpf des if wird übersprungen, und die Funktion kommt zu return b;, gibt also 9 zurück. Du brauchst kein else: Sobald ein return läuft, wird der Rest der Funktion sowieso übersprungen. (Mit else würde die Funktion genauso funktionieren.)
Bei mehreren Bedingungen kommt es auf ihre Reihenfolge an, denn das erste return, das läuft, gewinnt. Diese Funktion gibt einem Spieler für seine Punkte 3, 2 oder 1 Sterne:
#include <stdio.h>
int sterne(int punkte) {
if (punkte >= 90) {
return 3;
}
if (punkte >= 50) {
return 2;
}
return 1;
}
int main(void) {
printf("%d\n", sterne(95));
printf("%d\n", sterne(60));
printf("%d\n", sterne(20));
return 0;
}Dieses Programm gibt aus:
3
2
1Bei 95 Punkten ist die erste Bedingung wahr, also gibt die Funktion 3 zurück. Bei 60 Punkten ist die erste Bedingung falsch und die zweite wahr: 2. Bei 20 Punkten ist keine der Bedingungen wahr, also kommt die Funktion bis zur letzten Zeile und gibt 1 zurück. Würde die Funktion zuerst punkte >= 50 prüfen, bekäme man mit 95 Punkten nur 2 Sterne, weil 95 auch mindestens 50 ist.
Achte auf das letzte return. Eine Funktion, die nicht void ist, muss einen Wert zurückgeben, egal wie die Bedingungen ausgehen. Ohne die Zeile return 1; hätte die Funktion bei 20 Punkten nichts zurückzugeben, und das Programm ließe sich nicht kompilieren: error: non-void function does not return a value in all control paths. Das Ende der Meldung, in all control paths, bedeutet „in jedem Fall“: Der Compiler hat bemerkt, dass ein Weg durch die Funktion ihr Ende ohne ein return erreicht.
In einer void-Funktion kannst du return; ohne Wert schreiben. Die Funktion endet dann einfach. Das ist nützlich, wenn die Funktion früh aufhören soll, weil sie ihre Aufgabe nicht erfüllen kann:
#include <stdio.h>
void zeige_division(int a, int b) {
if (b == 0) {
printf("Du kannst nicht durch null teilen.\n");
return;
}
printf("%d\n", a / b);
}
int main(void) {
zeige_division(10, 2);
zeige_division(10, 0);
return 0;
}Dieses Programm gibt aus:
5
Du kannst nicht durch null teilen.So schreibst du es:
Anweisungen
- 1
Die Funktion
eintrittspreisgibt den Preis einer Zookarte für einen Besucher des angegebenen Alters zurück. Bisher gibt sie für alle200zurück. Füge über der Zeilereturn 200;Bedingungen hinzu: Kinder unter 6 kommen kostenlos herein (0), und Besucher unter 18 zahlen100. Das Programm gibt dann0,100und200aus. - 2
Senioren ab 65 Jahren zahlen auch
100. Füge der Funktion eine Bedingung für sie hinzu und gib am Ende vonmain, vorreturn 0;,eintrittspreis(70)aus. Das Programm gibt noch ein100mehr aus.