Autor |
Beitrag |
ccfrosh
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.01.10 16:09
Huhu ich hab einen Taschenrechner mit Delphi gemacht der soweit läuft - aus langeweile entstanden- ist auch ein ganz simpler
Jetzt hab ich nur eine Frage:P
Ich möchte um einen Absturz des Programms zu verhindern überprüfen ob die eingegebenen Zahlen auch tatsächlich Zahlen sind und keine Buchstaben - wie kann ich das am geschicktesten anstellen.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 23.01.10 16:20
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Webo
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: Sa 23.01.10 16:20
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
ccfrosh 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.01.10 17:02
danke für die schnellen antworten
habs jetzt in meinen quellcode eingefügt
Delphi-Quelltext 1: 2: 3: 4: 5:
| try eins:= StrToFloat(editeins.text); except Ergebnisse.caption:= 'Fehler bei der Eingabe. Zahl 1 und 2 müssen Zahlen sein'; end; |
das ganze noch mit zwei anstatt eins aber es funktioniert nicht. Könnt ihr mir sagen woran das liegt
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: Sa 23.01.10 17:06
Von welchem Typ ist denn "eins" ? Eine Fehlermeldung wäre auch nicht schlecht 
_________________ Debuggers don't remove bugs, they only show them in slow-motion.
|
|
ccfrosh 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.01.10 17:24
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;
type TForm1 = class(TForm) editeins: TEdit; editoperand: TEdit; editzwei: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Ergebnisse: TPanel; Panel1: TPanel; Label1: TLabel; Label2: TLabel; procedure BitBtn3Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn3Click(Sender: TObject); begin close; end;
procedure TForm1.BitBtn1Click(Sender: TObject); var eins, zwei, ergebnis : real; begin try eins:= StrToFloat(editeins.text); except Ergebnisse.caption:= 'Fehler bei der Eingabe. Zahl 1 und 2 müssen Zahlen sein'; end;
zwei:= StrToFloat(editzwei.text); if editoperand.text = '+' then begin ergebnis:= eins+zwei; Ergebnisse.caption:= FloatToStrF(ergebnis, FFFixed, 10,2); end; if editoperand.text = '-' then begin ergebnis:= eins-zwei; Ergebnisse.caption:= FloatToStrF(ergebnis, FFFixed, 10,2); end; if editoperand.text = '*' then begin ergebnis:= eins*zwei; Ergebnisse.caption:= FloatToStrF(ergebnis, FFFixed, 10,2); end; if editoperand.text = '/' then begin if zwei = 0 then begin Ergebnisse.Caption:= 'Fataler Fehler ! Man darf nicht durch null dividieren!' end; if zwei <> 0 then begin ergebnis:= eins/zwei; Ergebnisse.caption:= FloatToStrF(ergebnis, FFFixed, 10,2); end; end; if editoperand.text <> '+' then if editoperand.text <> '-' then if editoperand.text <> '*' then if editoperand.text <> '/' then Ergebnisse.caption:= 'Keinen gültigen Operanden eingegeben';
end;
procedure TForm1.BitBtn2Click(Sender: TObject); begin editeins.Text:= ''; editzwei.Text:= ''; editoperand.Text:= ''; Ergebnisse.Caption:='Geben sie erneut eine Zahl und eine Operand zur Berechnung ein'; editeins.SetFocus; end;
procedure TForm1.FormCreate(Sender: TObject); begin showMessage('Hallo, geben sie bitte nur Zahlen ein. Um zum Taschenrechner zu gelangen drücken sie ok!'); end;
end. |
das ist der quelltext - fehlermeldung ist dass die variable1, keinen gültigen gleitkommawert enthält
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 23.01.10 17:31
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 23.01.10 17:48
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: Sa 23.01.10 17:59
@Frühlingsrolle: Ist es mit Real typen nicht auch möglich Kommazahlen zu verwenden?
Wusstest du, dass die Standarteinstellung des Delphi-Debuggers die Fehlermeldung trotz try/except block anzeigt? Wenn du dein Programm ohne Delphi startest sollte es ohne Fehlermeldungen funktionieren. Wobei dieser Weg auch nicht der beste ist, aber für ein hello world programm sollte es doch reichen.
_________________ Debuggers don't remove bugs, they only show them in slow-motion.
|
|
ccfrosh 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.01.10 18:02
hab das real jetzt in extended umgewandelt aber es kommt immer noch die selbe fehlermeldung wenn ich jetzt nen buchstaben eingebe
--- Moderiert von Narses: Beiträge zusammengefasst---
SAiBOT hat folgendes geschrieben : | @Frühlingsrolle: Ist es mit Real typen nicht auch möglich Kommazahlen zu verwenden? |
bis jetzt hat der lehrer auch nix davon gesagt dass man was ändern soolllte. ist auch bei allem bis jetzt gegangen.
wenn ich nur das programm - also außerhalb von delphi starte wird die falsche zahl aka buchstabe als null genommen und damit wird dann gerechnet:/
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 23.01.10 18:08
Dann lass erst garnicht zu das Buchstaben eingegeben werden.
ccfrosh hat folgendes geschrieben : | hab das real jetzt in extended umgewandelt aber es kommt immer noch die selbe fehlermeldung wenn ich jetzt nen buchstaben eingebe |
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Sa 23.01.10 18:19
Frühlingsrolle hat folgendes geschrieben : |
Entweder du rechnest hier nur mit ganzen Zahlen (z.b. real)[...] oder mit Gleitkommawerten (z.b. extended) |
Verstehe ich dich falsch, oder behauptest du gerade ernsthaft, Real sei kein Gleitkommawert?
ccfrosh: Startest du das Programm aus der IDE oder rufst du die Exe normal auf (z.B. mit Doppelklick im Explorer)? Wenn ich mich richtig erinnere, gibt der Debugger auch dann Fehlermeldungen aus, wenn die Exception eigentlich mit einem try-except-Block abgefangen würde. Wenn man das Programm außerhalb der IDE startet, ist das nicht mehr so.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: Sa 23.01.10 18:28
_________________ Debuggers don't remove bugs, they only show them in slow-motion.
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Sa 23.01.10 18:33
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
ccfrosh 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.01.10 19:59
ja ich habs mit doppelklick im explorer gestartet:P
|
|