"Taschenrechner"



  • Also, ich bin mit C++ noch ziemlich am Anfang (lerne mit einem Buch). Jetzt wollte ich einen Taschenrechner auf eigene Faust programmieren. Meine Oberfläche sieht so aus:

    http://rapidshare.com/files/124638944/Vorlage.jpg.html

    Und mein Programmiercode so:

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 Form1;
    float Zahl1, Zahl2, Ergebnis;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Ergebnis = Zahl1 + Zahl2;
    Label4->Caption = String(Ergebnis);
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Ergebnis = Zahl1 - Zahl2;
    Label4->Caption = String(Ergebnis);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Ergebnis = Zahl1 * Zahl2;
    Label4->Caption = String(Ergebnis);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    Ergebnis = Zahl1 / Zahl2;
    Label4->Caption = String(Ergebnis);
    }
    //---------------------------------------------------------------------------

    Nur wenn ich das Programm dann starte, gebe ich zwei Zahlen ein, und drücke auf ein Rechenzeichen, doch bei ALLEM kommt immer nur null raus..... Ich denke man muss noch so etwas in der Art dazumachen:

    Ergebnis = StrToInt

    ich weiß nur nicht ob das so stimmt, oder wohin es kommt. Bitte helft mir.

    MfG Splinter



  • Du mußt natürlich deine Zahlen noch aus den Editfeldern holen. Die globalen Variablen (Zahl1, Zahl2, Ergebnis) lass da bitte auch gleich weg. Mal als Beispiel.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       try
       {   
          float Zahl1 = Edit1->Text.ToDouble();
          float Zahl2 = Edit1->Text.ToDouble();
          Label4->Caption = String(Zahl1 + Zahl2);
       }
       catch(...)
       {
    // keine gültigen Zahlen eingegeben
       }
    }
    


  • Meine Frage ist mal OFFTOPIC, bezogen auf Braunstein seiner Antwort.

    Gibt es irgendwelche qualitativen Unterschiede zwischen

    float x = FloatToStr(Edtit1->Text);
    

    und

    float x = Edit1->Text.ToDouble();
    

    Braunstein schreibt

    Label4->Caption = String(Zahl1 + Zahl2);
    

    castet String() die float einfach so nach (Ansi)String?
    Ich bin immer ein FloatToStr bzw FloatToStrF gwohnt.



  • Frager2 schrieb:

    Meine Frage ist mal OFFTOPIC, bezogen auf Braunstein seiner Antwort.

    Gibt es irgendwelche qualitativen Unterschiede zwischen

    float x = FloatToStr(Edtit1->Text);
    

    und

    float x = Edit1->Text.ToDouble();
    

    [...]

    beide sind völlig unter unterschiedlich?
    FloatToStr => Zahl -> String
    .ToDouble => String -> Zahl

    greetz KN4CK3R



  • Frager2 schrieb:

    Meine Frage ist mal OFFTOPIC, bezogen auf Braunstein seiner Antwort.

    Wenn du StrToFloat zu ToDouble meinst, nein, da gibt es keine prinzipiellen Unterschiede. Um beide sollte man auch einen try/catch-Block machen.

    Das einfache Casten (eigentlich ja ein Konstruktoraufruf) von float nach AnsiString ist äquivalent zu FloatToStr. Bei FloatToStrF hat man ja noch schöne Formatierungsmöglichkeiten, die man auch nutzen sollte.



  • Danke Braunstein.

    @KN4CK3R
    Ich versuch aus einem AnsiString ein float zu machen, demzufolge habe ich mich im Befehl verhaspelt. Sollte natürlich StrToFloat heissen.


Log in to reply