AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Verhindern des Überschreitens des Maximalwertes von integer

Verhindern des Überschreitens des Maximalwertes von integer

Ein Thema von derArmin · begonnen am 13. Nov 2005 · letzter Beitrag vom 14. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2   
derArmin

Registriert seit: 13. Nov 2005
Ort: Berlin
5 Beiträge
 
#1

Verhindern des Überschreitens des Maximalwertes von integer

  Alt 13. Nov 2005, 11:28
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*
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 11:30
Dafür gibts Try...except:

Delphi-Quellcode:
try
 Variable:= strtoint(Edit.text)
except
 Showmessage(Zu große Zahl)
end;
Wunder dich nicht, wenn trotzdem eine Fehlermeldung kommt, wenn du das Programm aus der IDE startest.
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 11:31
Hi!

Herzlich Willkommen in der DP!

Such mal nach Hier im Forum suchenTryStrtoInt, evtl. hilft dir das weiter.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.113 Beiträge
 
Delphi 12 Athens
 
#4

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 12:10
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:
Var i: Integer;

Begin
  i := StrToIntDef(Edit1.Text, Low(Integer));
  If i = Low(Integer) Then {Fehler...}
End;
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 ^^


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.
If not TryStrToInt(Edit1.Text, i) Then {Fehler...}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
derArmin

Registriert seit: 13. Nov 2005
Ort: Berlin
5 Beiträge
 
#5

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 12:31
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:
begin
Try

    zz := 0;
    if not TryStrToInt(edit1.text, z)
    then
    begin
      showmessage('Die Zahl ist zu groß');
      
    end
    else
    z := StrToInt(Edit1.Text);

...
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??? Das kann doch nicht wahr sein!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 12:38
Zitat von derArmin:
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.
Sünde! *g*
Falsche Verwendung von try...except

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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
derArmin

Registriert seit: 13. Nov 2005
Ort: Berlin
5 Beiträge
 
#7

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 12:57
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

Danke für die Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.113 Beiträge
 
Delphi 12 Athens
 
#8

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 13:08
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
derArmin

Registriert seit: 13. Nov 2005
Ort: Berlin
5 Beiträge
 
#9

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 15:59
ja jetzt wo du es sagst.

Hast Recht okee ich schmeiß es raus

  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Verhindern des Überschreitens des Maximalwertes von inte

  Alt 13. Nov 2005, 16:50
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz