Problem bei einem Taschenrechner



  • Hallo,
    Ich habe versucht einen Taschenrechner in C++ (Borland C++ Builder 6) zu programmieren und es will einfach kein Ergebniss kommen.
    Eigentlich sollte man eine Zahl eingeben, auf + drücken, noch eine Zahl eingeben und dann auf = drücken aber da kommt dann nur eine 0.
    Hier der Quelltext

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "taschenrechner.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int Zahl, Speicher, Ergebnis, as;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if (Zahl < 100000000)
     {Zahl = Zahl * 10 + 1;
      Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 2;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 3;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 4;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button8Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 5;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 6;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 7;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button9Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 8;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10 + 9;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button10Click(TObject *Sender)
    {
    if (Zahl < 100000000)
    {Zahl = Zahl * 10;
    Label1->Caption = IntToStr (Zahl);}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button16Click(TObject *Sender)
    {
    Zahl = 0;
    Speicher = 0;
    Ergebnis = 0;
    Label1->Caption = "0";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button11Click(TObject *Sender)
    {
    as = 1;
    Speicher = Zahl;
    Zahl = 0;
    Label1->Caption = "0";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button15Click(TObject *Sender)
    {
    if (as = 1)
    {
     Ergebnis = Zahl + Speicher;
     Label1->Caption = IntToStr (Ergebnis);
    }
    if (as = 2)
    {
     Ergebnis = Zahl - Speicher;
     Label1->Caption = IntToStr (Ergebnis);
    }
    if (as = 3)
    {
     Ergebnis = Zahl * Speicher;
     Label1->Caption = IntToStr (Ergebnis);
    }
    if (as = 4)
    {try
     {
      Ergebnis = Zahl / Speicher;
     }
     catch (...)
     {
     }
    }
    Label1->Caption = IntToStr (Ergebnis);
    Zahl = 0;
    Speicher = 0;
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    


  • welcher Button ist denn für was da?

    den Unterschied zwischen Zuweisung (=) und Vergleich (==) kennst du aber? Ist vor allem für Abfragen wie z.B. if notwendig

    wo wird denn as gesetzt?

    die Suchfunktion liefert auch eine Menge Beiträge zum Thema Taschenrechner ...



  • Linnea schrieb:

    den Unterschied zwischen Zuweisung (=) und Vergleich (==) kennst du aber?

    Sieht nicht so aus...

    Daher mal kurz die Erklärung:

    Wenn du sowas notierst

    if (as = 1)
    

    ist die Bedingung immer true. Denn du fragst nicht, ob as den Wert 1 hat (==), sondern du weist as den Wert 1 zu (=). Was da rauskommt, wird dann nochmal als boolscher Wert interpretiert. Im Klartext: solange du as nicht 0 zuweist (denn die wäre hier gleichbedeutend mit false), wird der Ausdruck immer true sein.



  • oh man xD stimmt den fehler hab ich nicht gefunden danke ^^



  • Der Broland C++ Compiler ist zwar gut und schön,
    aber ich persönlich würde den Codeblocks-Compiler empfehlen (mit dem ich auch arbeite). Der Quellcode wäre bei diesem Compiler sehr viel kürzer (etwas 95 Zeilen (hab's schon selbst programmiert)), wenn man den Umgang mit "string" und Funktionen beherrscht.



  • Hallo

    Die Konsole vom Code::Blocks und die VCL des Builders sind natürlich nicht direkt miteinander vergleichbar (vor allem da man auch mit dem Builder ein Konsolenprogramm schreiben kann). Natürlich wäre für Anfänger ein Konsolenprogramm immer besser als eine OOP-GUI, gleich welcher Compiler.

    bis bald
    akari


Anmelden zum Antworten