"ungültige Gleitkommaoperation" (war: (wie verhext) Es will net richtig laufen )
-
n'Abend,
bin n newbie in C++ und hab n kleines Problem, vielleicht könnt Ihr mir helfen.
Die Werte für die Variablen "gewicht" und "bier" werden via Edit-Felder eingegeben, jedoch beim ButtonClick kommt ne Fehlermeldung "ungültige Gleitkommaoperation". Aber was noch komischer is, wenn ich die Zeile
"c=alkbier/(r*gewicht)" mit // rausmache, bekomme ich einen Wert für c und ich bekomme 0 für alkbier ( werden dann in die entsprechnden Edit-Felder ausgegeben ).Hier mal der Quellltext ( habe C++Builder 3 und WinXP, falls das wichtig wäre )
//--------------------------------------------------------------------------- float r; void __fastcall TForm1::RadioGroup1Click(TObject *Sender) { switch (RadioGroup1->ItemIndex) { case 0: r = 0,7; break; case 1: r = 0.6; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { float gewicht, bier, alkbier, c, cneu; gewicht = StrToFloat (Edit1->Text); bier = StrToFloat ( Edit2->Text); alkbier = bier * 0,05 * 0,8; c = alkbier/(r*gewicht); Edit3->Text = c; Edit4->Text = alkbier; } //---------------------------------------------------------------------------
Thx schon mal in voraus.
<edit>1. Bitte Code-Tags verwenden!
2. Bitte aussagekräftige Überschriften erstellen!</edit>[ Dieser Beitrag wurde am 09.06.2003 um 01:22 Uhr von junix editiert. ]
-
float r=1;
du musst r einen Wert zuweisen da du sonst durch Null teilst.
-
Thx, das hat zwar die Fehlermeldung beseitigt, aber warum kommen als Ergebnisse für "c" und "alkbier" immer 0 ?
Und beim "Wegkommentieren" der Zeile " c=alkbier/(r*gewicht)" ist es immernoch das Gleiche. Warum?
-
Folgende Punkte:
- Kommentare im Quelltext sind immer sinnvoll.
- Grundsätzlich solltest du dir angewöhnen, deinen Quelltext zu formatieren. Es gibt da gewisse Style-Regeln die man einhalten sollte.
- Man rückt nach Beginn eines Blockes ('{') immer 4 Leerzeichen (oder 1 Tab) ein.
- Man achtet etwas auf die Lesbarkeit der sourcen. Z.b: ist eine Anweisung auf der selben Zeile wie das case-statement höchst unlesbar
- Man schreibt grundsätzlich blöcke die logisch zusammenhängen ohne eine Leerzeile dazwischen, das macht das Ganze höchst unlesbar... - Man kann nicht einfach einem AnsiString alles zuweisen (siehe unten für weitere Erklärungen
So, zum letzten Punkt oben:
Wenn du ein nicht-AnsiString-Objekt einem AnsiString zweisen willst, dann wird ein temporäres AnsiString-Objekt erstellt, in dessen Konstruktor - nach Möglichkeit - der Wert übergeben wird. Betrachtet man den Konstruktor des AnsiString in der Hilfe so stellt man fest, dass es keinen Konstruktor für float-Variablen gibt, nur für double. Das Eine wäre nun also, die float-Variable durch einen double zu ersetzen, das Andere wäre es, eine Konvertierungsroutine die Float Zu String konvertiert zu benutzen.-junix
-
mit
case 0: r = 0,7;
wird das nix!!!!!!!!!!!!!!!!!!!
(Da wird immer 0 zufewiesen! Eigentlich sollte ein Fehler kommen?
-
Schon mal was von ENGLISCHER Zeichensetzung gehört???
[ Dieser Beitrag wurde am 09.06.2003 um 20:30 Uhr von aaaabyx editiert. ]
-
probiers doch mal mit
case 0: r = 0.7; // <--- so mut dat
und nicht mit
case 0: r = 0,7; // und nicht so [zwischen komma und Punkt ist ein kleiner aber feiner Unterschied]
-
Hab ich doch alles schon gesagt, MENSCH!