Es wäre cool, wenn Du den Code als "Delphi-Code einfügen" (Helm-Symbol) und einrücken würdest.
Das würde die Lesbarkeit schon mal deutlich verbessern.
Bist Du sicher, dass Deine Abfragen korrekt funktionieren?
Wenn ich z.B. den 31.1.2021 eingebe, wird folgendes ausgegeben:
Zitat:
Bitte den Tag eingeben 31
Bitte den Monat eingeben 1
Bitte das Jahr eingeben 2021
Der 31. ist gültig.
31.1.2021 ist unzulässig.
Für mich ist der Code zu sehr verschachtelt und daher mMn sehr Fehleranfällig.
Statt der IF-Verschachtelung könntest Du z.B. auch mit einer Repeat-Schleife arbeiten.
Als Beispiel für die Eingabe und Überprüfung des Tags, zB:
Delphi-Quellcode:
// Überprüfung ob der Tag zwischen 1...31 liegt
var
iTag : Integer;
sEingabe : String;
begin
Repeat
write('Bitte den Tag eingeben: ');
readln(Eingabe);
Tag := StrToIntDef(Eingabe, 1);
if (Tag < 1) or (Tag > 31)
then WriteLn('Die Eingabe ist ungültig!');
until (Tag > 0) and (Tag <=31);
...
Was meinst Du mit "der Compiler bleibt stehen"?