Problem mit Taschenrechner C#

Wieso rechnets dir nur die zwei letzten Werte aus? Wenn du alle Werte in der Liste hast und die in einer Schleife durchläufst, muss er ja alle berücksichtigen.

Wenns nicht klappt, poste am besten nochmal Code. Dann kann man dir besser helfen.
 
Das mit dem Liste durchgehen ist keine so gute Idee, glaub ich. Wenn du einfach drei globale Variablen nimmst:

Visual Basic:
Public Class Hauptfenster
     Private Ergebnis As Double         ' Hier wird das Ergebnis der Rechnung gespeichert
     Private letzteOperation As String  ' Hier die letzte Rechenoperation, die der Benutzer angeklickt hat
     Private aktuelleZahl As Double?    ' und hier die Zahl, die unmittelbar davor eingegeben worden ist
'...
End Class

Dann sollte das eigentlich genauso gehen.
Jedes Mal, wenn der Benutzer auf eine Zahl oder das Komma klickt, dann hängst du das Zeichen an den Text in der TextBox an, liest ihn ein und wandelst ihn mit "Double.Parse" in eine Zahl um, die du in aktuelleZahl speicherst.
Wenn der Benutzer dann auf eine Rechenoperation klickt, dann kannst du den Wert aus aktuelleZahl mit dem Wert aus Ergebnis addieren, usw. Den Wert schreibst du dann noch in die TextBox zurück, und schon hast dus eigentlich.
 
Morgen,
meinst du das so dass er mir den Operator in die TextBox schreibtWäre jedenfalls eine Möglichkeit die ich aber nicht nehmen würde :).
Danke MfG
 
Nein, das mein ich nicht. :)
Jedes Mal, wenn der Benutzer eine Ziffer anklickt, hängst du die an die Textbox an und schreibst die komplette Zahl in die "aktuelleZahl".
Wenn er dann eine Rechenoperation anklickt, dann rechnest du zum Beispiel "ergebnis += aktuelleZahl" und leerst danach aktuelleZahl wieder. Dann gibst du "Ergebnis" noch in der TextBox oben aus und du hast einen Taschenrechner.
In 35 Zeilen kann mans schaffen, glaubs mir ;) .

Anscheinend hab ich fast nochmal dasselbe geschrieben wie oben...
 
Zuletzt bearbeitet:
Ja sorry mache erst seid ner Woche C#, unter C++ war das irgendwie alles einfacher :).
Warscheinlich denk ich zu kompliziert.
Werde das jetzt mal probieren...
 
hm Irgendwie will das nicht. Hab also die aktuelleZahl
Code:
 aktuelleZahl = decimal.Parse(textBox1.Text);
und klicke auf geteilt, aber was soll er denn Teilen er hat ja bis jetzt nur eine Zahl. Ergebnis steht auf 0. ergebnis/=aktuelleZahl ergbit natürlich 0.
je mehr ich daran arbeite desto verwirrtet bin ich ;)
 
Ein normaler Taschenrechner funktioniert doch so, dass du zuerst eine Zahl eingibst, dann die geteilt-Taste drückst, und dann die zweite Zahl eingibst. Wenn du jetzt auf "=" oder eine andere Rechenoperation drückst, bestimmt er erstmal das Ergebnis von der Division und nutzt das dann gleich wieder als erste Zahl für die nächste Operation.
Das heißt, du darfst erst rechnen, wenn beide Zahlen da sind...
 
Wart mal... ich hab hier einen Code, der funktioniert einwandfrei. Schau mal, ob dus verstehst, wenn nicht, dann frag :) . Ich glaub, du stehst wirklich grad auf der Leitung.

Visual Basic:
Public Class Hauptfenster
     Private Ergebnis As Double                       ' Hier wird das Ergebnis der Rechnung gespeichert
     Private letzteOperation As String             ' Hier die letzte Rechenoperation, die der Benutzer angeklickt hat
     Private aktuelleZahl As Double?               ' und hier die Zahl, die unmittelbar davor eingegeben worden ist

     Private Sub ZahlKlick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ...
          If Not aktuelleZahl.HasValue Then tbZahl.Text = ""

          tbZahl.Text += DirectCast(sender, Button).Text

          aktuelleZahl = Double.Parse(tbZahl.Text)
     End Sub

     Private Sub OperationKlick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ...
          If aktuelleZahl.HasValue Then
               Select Case letzteOperation
                    Case "+"
                         Ergebnis += aktuelleZahl
                    Case "-"
                         Ergebnis -= aktuelleZahl
                    Case "*"
                         Ergebnis *= aktuelleZahl
                    Case "/"
                         Ergebnis /= aktuelleZahl
                    Case Else
                         Ergebnis = tbZahl.Text
               End Select

               aktuelleZahl = Nothing
          End If

          tbZahl.Text = Ergebnis
          letzteOperation = DirectCast(sender, Button).Text
     End Sub
End Class
 
Zurück