![]() |
Verhindern des Überschreitens des Maximalwertes von integer
Hallo seid gegrüßt. Ich habe vorhin schon eine Lösung auf ein anderes Problem gefunden, jedoch nicht auf dieses:
Ich habe ein Editfeld, dessen Inhalt mit StrToInt an eine variable vom Typ integer übergeben werden soll. Der Maximalwert eines integers ist 2.147.483.647. Wenn ich werte über diesem Maximalwert eingebe, dann kommt natürlich ein Fehler. Nu die Frage: wie kann ich zum Beispiel mit einer if-Abfrage die Überschreitung des Maximalwertes verhindern? Ich möchte keine anderen Variablentypen benutzen. Irgendwie is das ne Zwickmühle, weil ich ja nicht if > benutzen kann. bei if not <= will es aber auch nicht klappen... Hilfe *g* |
Re: Verhindern des Überschreitens des Maximalwertes von inte
Dafür gibts Try...except:
Delphi-Quellcode:
Wunder dich nicht, wenn trotzdem eine Fehlermeldung kommt, wenn du das Programm aus der IDE startest.
try
Variable:= strtoint(Edit.text) except Showmessage(Zu große Zahl) end; Delphi liefert trotz dem Try noch eine Meldung, wobei du das irgendwo (?) noch abstellen kannst. Wenn du die compilierte Exe ausserhalb von Delphia aufrufst, solltest du keine Meldung mehr bekommen. |
Re: Verhindern des Überschreitens des Maximalwertes von inte
Hi!
Herzlich Willkommen in der DP! Such mal nach ![]() Ciao Frederic |
Re: Verhindern des Überschreitens des Maximalwertes von inte
Tja, für vieles gibt es eben mehrere Wege, wobei´ich persönlich hierfür nicht gleich auf 'nen Try-Except-Block zurückgreifen würde.
Wenn deinen einzugebenden Werte nicht all zu sehr ins negative gehen, dann ginge auch folgendes:
Delphi-Quellcode:
Oder du wenn es dir egal ist, wenn der größtmögliche Intergerwert (2.147.483.647) nicht mehr vorhanden ist, dann verwende statt dem Low(Integer) das High(Integer) oder MaxInt ^^
Var i: Integer;
Begin i := StrToIntDef(Edit1.Text, Low(Integer)); If i = Low(Integer) Then {Fehler...} End; möglicher Wertebereich bei verwendung von MinInt: -2.147.483.647 .. 2.147.483.647 MaxInt: -2.147.483.648 .. 2.147.483.646 Da StrToIntDef aber intern auch nur das TryStrToInt verwendet, dann ist würde direkt damit der Wertebereich natürlich nicht um 1 verringert.
Delphi-Quellcode:
If not TryStrToInt(Edit1.Text, i) Then {Fehler...}
|
Re: Verhindern des Überschreitens des Maximalwertes von inte
Hoho danke für die schnellen Antworten. Ich haben in dem Programm bereits eine Try-Abfrage drinn, allerdings für das ganze Programm, falls ich halt ne Lücke übersehn habe.
Gut ich hab das mal so gemacht:
Delphi-Quellcode:
Nun geschieht aber etwas merkwürdiges(ich habe testhalber 5 Milliarden eingetippt): Er sagt zwar, dass die Zahl zu groß ist, macht aber weiter! und zwar mit einer Null weniger. Warum??? :gruebel: Das kann doch nicht wahr sein!
begin
Try zz := 0; if not TryStrToInt(edit1.text, z) then begin showmessage('Die Zahl ist zu groß'); end else z := StrToInt(Edit1.Text); ... |
Re: Verhindern des Überschreitens des Maximalwertes von inte
Zitat:
![]() Zum Problem: Bist du dir sicher, dass der gesamte restliche Code im else-Block steckt? Du kannst auch nach dem ShowMessage per Exit dieProzedur verlassen. |
Re: Verhindern des Überschreitens des Maximalwertes von inte
ah ja das exit behebt die Sache ^^ nu hört er auf wenn er soll.
Und ja, der gesamte folgende Quelltext stand im else-Zweig. Und wegen der Sünde : nicht haun *g* Ich hab das nur eingefügt, damit ich einem Absturz vorbeuge, ich geh momentan noch alles mögliche an "Falscheingaben" durch um das Programm Idiotensicher zu machen. Danach werde ich beichten und diese Sünde ablegen :angel: Danke für die Hilfe. |
Re: Verhindern des Überschreitens des Maximalwertes von inte
Na ja, wäre es dann nicht besser gleich den "großen" Try-Except-Block wegzulassen, denn wenn dann wirklich ein Fehler auftritt, dann weißt du gleich genau wo der aufgetreten ist, da ja der Debuger dort abbricht ;)
|
Re: Verhindern des Überschreitens des Maximalwertes von inte
ja jetzt wo du es sagst.
Hast Recht okee ich schmeiß es raus :) :coder: |
Re: Verhindern des Überschreitens des Maximalwertes von inte
du weißt ja den maximalen wert und wieviel zeichen dies sind. Wenn im Edit mehr als 10 Zeischen sind kannst du schonmal davon ausgehen das der Wert zu groß ist (außer er beginnt mit "-"). Wenn im Edit 10 Zeischen sind musst du prüfen dass, das erste zeischen nicht größer als 2 ist. Wenn es genau 2 ist musst du dann prüfen ob es nicht größer als 1 ist etc.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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