Video

Ungültige Eingaben – Fehlerbehandlung

Du möchtest wissen, wie du Fehler in C entdecken und beheben kannst. In Folgenden zeigen wir dir, wie du bei Fehlern vorgehen und was du beachten musst.

Inhaltsübersicht

Warum werden Eingaben ungültig? – Fehlerbehandlung

Bevor wir mit der Fehlerbehandlung starten, müssen wir uns erst einmal fragen: Was macht Eingaben eigentlich ungültig? Dein Programm erwartet immer bestimmte Werte. Das ist ja auch logisch, schließlich lässt sich nur mit Zahlen rechnen und nur mit Buchstaben schreiben. Um von deinem Programm interpretierbar, also nutzbar zu sein, muss eine Eingabe diesem erwarteten Typ entsprechen. Damit wird schnell klar, dass wir unsere Eingaben immer auf ihre Gültigkeit überprüfen müssen, wenn wir wollen, dass unser Programm reibungslos läuft.

Am einfachsten ist das noch, wenn wir ein Programm wie dieses hier vorliegen haben:

C int
direkt ins Video springen
Beispiel

Hier erwarten wir einen Wert vom Typ int. Gibt unser Benutzer allerdings mehr als einen Wert ein oder entscheidet sich dazu, Buchstaben einzugeben, müssen wir eine Fehlerbehandlung ausführen.

Vorgehensweise zur Fehlerbehandlung: getchar()-Funktion

Also müssen wir jetzt zwei Dinge tun, um falsche Werte zu erkennen. Zuerst einmal überprüfen wir, ob es sich überhaupt um einen int-Wert handelt, indem wir den Rückgabewert unserer scanf-Funktion überprüfen. Dieser ist nämlich immer gleich der Anzahl der eingelesenen Werte. Ist dieser wie gewünscht eins, ist alles in Ordnung, ist er null, dann war die Eingabe nicht als ganze Zahl interpretierbar und wir springen in unsere Fehlerbehandlung.

Als nächstes müssen wir aber noch überprüfen, ob auch wirklich nur ein einziger Wert eingegeben wurde. Dafür bedienen wir uns der getchar()-Funktion.

C getchar, C int
direkt ins Video springen
Vorgehensweise bei der Fehlerbehandlung

Mithilfe dieser zweiten Einlese-Funktion können wir nämlich überprüfen, ob der Eingabe-Puffer nach der gewünschten Eingabe leer ist. Dazu müssen wir nichts Anderes tun, als zu schauen, ob das nächste einzulesende Zeichen ein Zeilenumbruch ist. Ist das nicht der Fall, folgt erneut unsere Fehlerbehandlung. Hat der Benutzer aber ENTER gedrückt, kann das Programm ganz normal fortfahren.

Weitere Einschränkungen

Zusätzlich zu Typbeschränkungen können außerdem auch noch andere Einschränkungen auf Eingaben zutreffen. Willst du zum Beispiel, dass nur Großbuchstaben eingegeben werden, musst du diese Bedingung noch einmal extra überprüfen. Dazu kannst du sie ganz einfach in eine eigene if-Bedingung packen oder aber in die bereits vorhandene integrieren.

C if
direkt ins Video springen
if-Bedingung

Die Aufteilung auf mehrere Bedingungen hat jedoch den Vorteil, dass du später eine differenziertere Fehlerrückmeldung zurückgeben kannst. Das heißt: statt einfach nur „Fehler“ auszugeben, kannst du „Fehler: Eingabewert muss ein Buchstabe sein“ oder „Fehler: Es darf immer nur ein Wert eingegeben werden“ ausgeben.

Falls du schon etwas weiter im Stoff bist und mit getchar() komplexere Dinge einliest, lässt sich diese Methode auch mit einer solchen Funktion anwenden.

Die eigentliche Fehlerbehandlung wird meist auf eine von zwei Weisen gehandhabt. Entweder das Programm gibt bei einer ungültigen Eingabe eine Fehlermeldung aus und bricht ab oder es fordert so lange eine gültige Eingabe vom Benutzer, bis er sie liefert und gibt bei jeder erneuten falschen Eingabe eine Fehlermeldung aus. Grundsätzlich darf ein Programm aber nie einfach undefiniert abbrechen, nur weil jemand aus Versehen ein falsches Passwort eingegeben hat. Denn wer will schon wegen jedes Tippfehlers ein Programm neu starten?

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung. Bitte .