![]() |
Hilfe mit value Befehl
Hallo zusammen!
letztens hat uns unser Lehrer gezeigt, wie man ein Programm absturzsicher machen kann. Verstanden hat es leider keiner und den Quelltext hat er auch nicht rausgegeben "Probiert das mal alleine". Prima, wie soll ich denn etwas programmieren, wenn ich nichteinmal den Ansatz kenne? Das einzige, was ich mitbekam war, dass er irgendetwas mit Value schwafelte, mehr nicht. Mein konkretes Problem ist jetzt: Was muss ich in den Quelltext eingeben, dass mit mein Programm nicht abstürzt, wenn ich ins Edit1-Feld nicht "4", sondern "vier" eingebe? Danke an alle, die bis hier hergelesen haben und mir versuchen zu helfen :) |
Re: Hilfe mit value Befehl
In eine Edit-Feld kannst du problemlos "vier" eingeben, da es ja einen String aufnimmt.
Ich weiß nicht, von was dein Lehrer geredet hat, ich könnte mir vorstellen, das er die .value Eigenschaft von Datenbankzugriffsobjekten gemeint hat welche Varianten sind. [Edit: oder er hat den val()-Befeh gemeint] |
Re: Hilfe mit value Befehl
Achso, sorry, das hätte ich erwähnen sollen :oops:
Die zahlen der beiden Editfelder muss man Multiplizieren, d.h ich habe ja schon stehen: Edit1.text:=strtofloat(z1); Edit2.text:=strtofloat(z2); Ergebnis:=(z1*z2); |
Re: Hilfe mit value Befehl
Aber wenn du die Zahlen multiplizieren willst muss das dann nich heißen:
Delphi-Quellcode:
Wenn du abfragen willst ob ein eingegebener Wert keine Zahl ist würd ich dir if...then... Empfehlen.
z1:=strtofloat(Edit1.text);
z2:=strtofloat(Edit2.text); Ergebnis:=(z1*z2); |
Re: Hilfe mit value Befehl
Zitat:
Delphi-Quellcode:
müßte es heißen oder besser
z1 := strtofloat(Edit1.text);
z2 := strtofloat(Edit1.text); Ergebnis := (z1*z2);
Delphi-Quellcode:
if (TryStrToFloat( Edit1.Text, z1)) and (TryStrToFloat( Edit2.Text, z2)) then
Ergebnis:=(z1*z2) else //Fehler; |
Re: Hilfe mit value Befehl
Ach genau :wall: . Naj wird Zeit dass es wieder Wochenende wird.
Jetzt hab ich doch gedacht du willst mich verbessrn naja. |
Re: Hilfe mit value Befehl
Delphi-Quellcode:
Genau das steht jetzt bei mir ^^"
z1:=strtofloat(Edit1.text);
z2:=strtofloat(Edit2.text); summe:=z1*z2; @mkinzler Ist dein letzter Code jetzt der Code, der zum absturzsicheren Programm führt? |
Re: Hilfe mit value Befehl
Ja. Zumindest bezüglich dieser Typumwandlungen
|
Re: Hilfe mit value Befehl
also ich würde dir die verwendung eines try/except-Blockes empfehlen (falls ich dein Problem richtig verstanden habe, du wirst nicht gerade mit Informationen um dich)
|
Re: Hilfe mit value Befehl
Man kann auch das OnKeyPress Event abfangen den Key Code (Wert der gedrückten Taste) analysieren:
Delphi-Quellcode:
Gruß
procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if not (Key in [#46, #48..#57, #8]) then Key := #0; end; Andi |
Re: Hilfe mit value Befehl
Hier habe ich mal eine function Value() geschrieben.
Wenn keine Zahl eingegeben wurde wird als Ergebnis 0 zurückgeliefert.
Delphi-Quellcode:
function Value(s:string):Double ;
begin try result:=StrToFloat(s); except // Eingabe ist keine Zahl result:=0; end; end; procedure TForm1.Edit1Exit(Sender: TObject); var z1,z2,ergebnis:double; begin z1:=Value(Edit1.text); z2:=value(Edit2.text); Ergebnis:=(z1*z2); edit3.text:=floattostr(ergebnis); end; |
Re: Hilfe mit value Befehl
Da finde ich aber die TryStrToFloat-Variante besser, da sie false als Ergebnis liefert, wenn der wert nicht gewandelt werden konnte. Bei dir kann man nicht unterscheiden ob der benutzer 0 oder jkklfjkskskjf in den Edit eingegeben hat.
|
Re: Hilfe mit value Befehl
@mkinzler
Das geht nicht :\ Undefinierter Bezeichner 'TryStrtofloat' Ausdruckstyp muss Boolean sein @ anderen Das klappt zwar alles, nur brauche ich das dann auch in der Klausur und so viel kann ich mir nicht merken, deswegen wäre mir eine unkomplizierte Lösung wirklich lieber. Aber danke für die großzügige Hilfsbereitschaft hier ^__^ |
Re: Hilfe mit value Befehl
Zitat:
Aber nochmal zur Grundfrage, was eird eingegeben 'vier' oder '4' StrToFloat/TryStrToFloat hilft nur beim 2. Das 1. kannst du mit Val() erreichen |
Re: Hilfe mit value Befehl
Zitat:
|
Re: Hilfe mit value Befehl
Zitat:
|
Re: Hilfe mit value Befehl
Nur leider macht die Funktion nicht ganz was ich versprochen hat habe :oops:
Sie Ignoriert nur falsche Zeichen im String.
Delphi-Quellcode:
würde eine Fehler liefern, aber
wert := StrToInt( '400x');
Delphi-Quellcode:
würde wert = 400 liefern. Ich nehme trotzdem an, das dein Lehrer diese Funktion gemeint hat.
Val( '400x', wert, fehlerpos);
[Edit: Sch.... Tippfehler] |
Re: Hilfe mit value Befehl
So schlecht ist die Routine doch gar nicht, Markus.
Zitat:
Einziger Nachteil der Prozedur: sie akzeptiert nur Dezimalpunkte. Gruß Hawkeye |
Re: Hilfe mit value Befehl
Nein, sie (?) such ja ne Funktion die 'vier' in 4 wandelt.
|
Re: Hilfe mit value Befehl
Ich kann mir ehrlich gesagt nicht vorstellen, daß ein Lehrer solche Anforderungen an die Schüler stellt. Meiner Meinung nach soll durch die Eingabe von "vier" nur getestet werden, wie sich das Programm bei der Eingabe von Texten verhält. Die Aufgabe der Schüler wird wohl lediglich darin bestehen, solche Eingaben als fehlerhaft zurückweisen.
Vielleicht kann uns "Maeuschen" dazu mehr sagen? Gruß Hawkeye |
Re: Hilfe mit value Befehl
Ich nehme eher mal an, dass der Lehrer Try-Except Blöcke gemeint hat.
|
Re: Hilfe mit value Befehl
Ich bin mir auch relativ sicher, das er den Val-Befehl gemeint hat; sie hatt auch sowas behalten ( value ~ Val).
|
Re: Hilfe mit value Befehl
edit: hatte übersehen, daß da schon 2 Seiten waren... sorry
Delphi-Quellcode:
var
v:double; // oder anderer numerischer typ vc:integer; begin //... val(Edit1.Text,v,vc); if vc<>0 then begin // Fehler end; //... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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 by Thomas Breitkreuz