![]() |
Eingaben prüfen (Pascal)
Guten Abend,
ich darf mal wieder ein gutes altes Pascalprogramm schreiben. Nun muss ich noch meine Eingaben abfangen, sprich ich habe ein Menü in dem verschieden Werde eingegeben werden, eigentlich alles Gleitkommazahlen. Bräuchte ich eine Funktion die prüft ob die eingabe in real liegt oder nicht. so nach dem Motto ist 0.00001 ein Teilmenge von Real, gibt es da ein Funktion? |
Re: Eingaben prüfen (Pascal)
Zitat:
|
Re: Eingaben prüfen (Pascal)
Na, es muss ja nicht sofort eine Falscheingabe sein. Man könnte sich auch Eingaben denken, die zwar syntaktisch völlig okay sind, aber die der Datentyp nicht mehr in all ihrer Genauigkeit erfassen kann.
IMHO wäre es eine Variante, wenn du die Eingabe zunächst in den Zieldatentyp (hier wohl Real) konvertierst, und dann wieder zurück zu String. Wenn jetzt der gelesene, und der 2x konvertierte String noch gleich sind, so kann der eingegebene Wert ohne Rundungsfehler in ausreichender Genauigkeit in Real gespeichert werden. (Auf fehlerhafte Eingaben muss natürlich im Vorfeld gesondert reagiert werden!) mfg, dizzy |
Re: Eingaben prüfen (Pascal)
das problem hatte ich auch schon oft: gibt es in pascal sowat in der art:
Code:
gibts das?
if try readln(InEinenInteger)=error
then machsnochmal; //also wenn der benutzer KEINEN integer eingibt, muss ers nochmal machen, solang bis ers hinkriegt |
Re: Eingaben prüfen (Pascal)
Zitat:
Delphi-Quellcode:
function SichereEingabe(Text: String): Integer;
var Wert, Code: Integer; WertEin: String; begin repeat Write(Text+' '); Readln(WertEin); Val(WertEin,Wert,Code); if Code <> 0 then Writeln('Ungültige Eingabe'); until Code=0; SichereEingabe := Wert; end; |
Re: Eingaben prüfen (Pascal)
soweit ich sehe prüft das nur, ob das eingegebene <>'' ist, oder?
was ist, wenn ich zb 'vierzehn' eingebe? |
Re: Eingaben prüfen (Pascal)
Nein, wenn du 'vierzehn' eingibst, dann ist in der Variable WertEin (String) 'vierzehn' gespeichert.
Wenn du nun mit der Funktion val probierst, Zeichen (d.h. Buchstaben) umzuwandeln, dann wird in der Variable Code (integer) der Fehlertyp zurückgegeben! Du wirst solange 'gezwungen', eine korrekte, gültige Eingabe einzugeben, bis Code=0 ist!
Delphi-Quellcode:
mfg
function SichereEingabe(Text: String): Integer;
var Wert, Code: Integer; WertEin: String; begin repeat Write(Text+' '); Readln(WertEin); Val(WertEin,Wert,Code); //Wenn Code <> 0, dann war in der Eingabe ein ungültiges Zeichen if Code <> 0 then Writeln('Ungültige Eingabe'); until Code=0; SichereEingabe := Wert; end; devnull |
Re: Eingaben prüfen (Pascal)
aso, mir war die bedeutung von val nit so ganz klar...
|
Re: Eingaben prüfen (Pascal)
Findet man alles in der Hilfe:
> Hilfe->Index->Suchen
Code:
Auszug aus der Hilfe
Val (Prozedur) Interpretiert einen String als numerischen Wert. Deklaration procedure Val(S; var V; var Code: Integer); Es gilt: S ist eine Variable des Typs String, die eine Zeichenfolge speichert, die einen numerischen Wert (mit Vorzeichen) ergibt. V ist eine Variable mit einem Integer- oder Real-Typ. Code ist eine Variable des Typs Integer. Zielsystem >Windows, Real, Protected |
Re: Eingaben prüfen (Pascal)
Zitat:
Delphi-Quellcode:
function SichereEingabe(Text: String): Integer;
var Wert, Code: Integer; WertEin, WertNeu: String; begin repeat Write(Text+' '); Readln(WertEin); Val(WertEin,Wert,Code); //Wenn Code <> 0, dann war in der Eingabe ein ungültiges Zeichen if Code <> 0 then Writeln('Ungültige Eingabe') else begin Str(Wert,WertNeu); if WertNeu <> WertEin then Code := 1; end; until Code=0; SichereEingabe := Wert; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz