Autor Beitrag
ccfrosh
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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



BeitragVerfasst: Sa 23.01.10 16:20 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Sa 23.01.10 16:20 

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
ccfrosh Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 23.01.10 17:02 
danke für die schnellen antworten

habs jetzt in meinen quellcode eingefügt
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 23.01.10 17:24 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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);
   //Berechnungen
   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
        //Fehlerausgabe beim Teilen durch 0
        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;
  //Fehlerausgabe falls man keinen gültigen Operanden hat
  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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 23.01.10 17:31 
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.01.10 17:48 
- Nachträglich durch die Entwickler-Ecke gelöscht -
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 23.01.10 17:59 
@Frühlingsrolle: Ist es mit Real typen nicht auch möglich Kommazahlen zu verwenden? :gruebel:

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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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 user profile iconNarses: Beiträge zusammengefasst---

user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:
@Frühlingsrolle: Ist es mit Real typen nicht auch möglich Kommazahlen zu verwenden? :gruebel:


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 23.01.10 18:08 
Dann lass erst garnicht zu das Buchstaben eingegeben werden.

user profile iconccfrosh hat folgendes geschrieben Zum zitierten Posting springen:
hab das real jetzt in extended umgewandelt aber es kommt immer noch die selbe fehlermeldung wenn ich jetzt nen buchstaben eingebe


user profile iconBlackheart666 hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal hier
www.delphi-library.d...n+erlauben_9065.html
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 23.01.10 18:19 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Sa 23.01.10 18:28 
user profile iconTimosch hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:

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.


Sind meine Posts unsichtbar :shock: ?

_________________
Debuggers don't remove bugs, they only show them in slow-motion.
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 23.01.10 18:33 
user profile iconSAiBOT hat folgendes geschrieben Zum zitierten Posting springen:

Sind meine Posts unsichtbar :shock: ?

Mea culpa. :mrgreen:

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
ccfrosh Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 23.01.10 19:59 
ja ich habs mit doppelklick im explorer gestartet:P