Also Rufus und Peter haben ja schon Möglichkeiten angedeutet.
Du kannst Die Überprüfung auch Schrittweise machen. Speziell für Dein
Stundenproblem ist das ja sehr einfach.
Zwei Zahlen sind gegeben. Die erste Zahl soll die Zehner-Ziffer sein,
die zweite Zahl die Einer-Ziffer.
Also weißt Du schon mal:
a.) Gültigkeitsbereich erste Zahl (Zehner): 0 bis 2 (inkl.)
b.) Gültigkeitsbereich zweite Zahl (Einer): 0 bis 9 (inkl.)
Nun sollen diese beiden Zahlen zu einer Stundenangabe zusammengerechnet
werden.
Stunde = Zehner * 10 + Einer
Und das Ergebnis darf nicht größer als 23 werden (Stunde 24 gibt es
nicht...):
c.) Gültigkeitsbereich Stunde: 0 bis 23 (inkl).
Das Prinzip ist immer gleich: Teile und hersche.
Das Problem immer in kleine Teilprobleme zerlegen und die kleinen
Teilprobleme nacheinander lösen. Das ist immer leichter als alles auf
einmal machen zu wollen.
Und wenn Du es dann noch ganz schön machen willst, gibts Du jeder
Bedingungen einen eigenen Namen, machst also aus jeder Bedingung eine
kleine Mini-Funktion. Zusätzlich fasst Du verschiede Sachen zusammen.
Dann wird Dein Code wunderbar einfach zu lesen und zu verstehen. Also
in etwa so:
bool ist_ziffer_gueltig(int ziffer)
{
return ( ziffer >= 0 ) && ( ziffer <= 9 );
}
bool ist_stunde_gueltig(int stunde)
{
return ( stunde => 0 ) && ( stunde <= 23 );
}
bool ist_minute_gueltig(int minute)
{
return ( minute => 0 ) && ( minute <= 59 );
}
int kombiniere_ziffern(int zehner_ziffer, int einer_ziffer)
{
return zehner_ziffer * 10 + einer_ziffer;
}
Mit diesem Rüstzeug kannst Du nun das Problem erschlagen:
int stunde_zehner = ...
int stunde_einer = ...
int minute_zehner = ...
int minute_einer = ...
bool alle_ziffern_gueltig =
ist_ziffer_gueltig(stunde_zehner)
&& ist_ziffer_gueltig(stunde_einer)
&& ist_ziffer_gueltig(minute_zehner)
&& ist_ziffer_gueltig(minute_einer);
int stunde = kombiniere_ziffern(stunde_zehner, stunde_einer);
int minute = kombiniere_ziffern(minute_zehner, minute_einer);
bool uhrzeit_gueltig =
alle_ziffern_gueltig
&& ist_stunde_gueltig(stunde)
&& ist_minute_gueltig(minute);
if (!( uhrzeit_gueltig ))
{
// Fehlerbehandlung
// Entweder ganz einfach, oder je nachdem wo der Fehler
// genau lag.
}
Keine Angst vor den vielen Zeilen. Dieser C-Code ist garantiert absolut
verständlich, auch wenn Du nach 10 Jahren wieder daran etwas ändern
musst. Vor allem brauchst Du keinerlei Hilfkonstrukte wie for(;;) und
break usw.
Und das allerschönste daran: Du brauchst Keine Kommentare zu schreiben.
Der C-Code ist so ausführlich und einfach dass jeder Kommentar
überflüssig ist. Was der C-Code macht, wird sofort ersichtlich.