"Rechner" gibt falsches Ergebnis aus
-
@wob ooops....
-
@wob ok hab ich jetzt tatsächlich doch geschafft, aber mir werden keine fehlenden break;s angezeigt ?
-
Keine Ahnung, muss jemand, der mit VS arbeitet, beantworten. Mit gcc bekommst du die implicit-fallthrough-Warnung.
Jedenfalls hast du die breaks zwar in den innersten
switch
es jeweils drin, aber bei den äußeren nicht. Das wesentliche Problem ist, dass deine (äußeren) switches viel zu lang ist. Jedercase
sollte nur 1 bis vielleicht 3 Zeilen lang sein. Wenn der Code länger ist, mach eine Funktion draus. Generell: Teile den Code in kurze (!) Funktionen auf, wo immer möglich.Aber jetzt such erstmal die fehlenden breaks und die Warnungseinstellung.
PS: Es scheint, dass diese Warnung erst mit VS 16.7 eingeführt wurde: https://developercommunity.visualstudio.com/t/issue-compiler-warning-when-using-implicit-fallthr/423975
-
Wenn dein VS das nicht kann, schau mal hier:
https://gcc.godbolt.org/z/111sdE
-
@wob danke, es lag wirklich einfach an den fehlenden break; Nochmals vielen Dank!
Aber eine frage juckt mcih dann jetzt doch: Wie würde man das (grob) eleganter machen?
-
Lerne, was Schleifen und Funktionen sind (so daß das Programm dann auch für eine beliebige Anzahl von Operanden funktioniert) - dann wird der Code sogar kürzer und eleganter.
-
@chritzeltopf sagte in "Rechner" gibt falsches Ergebnis aus:
Wie würde man das (grob) eleganter machen?
Ich denke "Schleifen und Funktionen" ist ein bißchen sehr allgemein. Für dein Problem wäre wohl z.B. "Stack" ein bessees Stichwort. Weißt du was das ist?
-
Den Stack braucht man nur, wenn man die Operatorprioritäten auch umsetzen will, also z.B. bei Eingabe von 2+3*4 "Punkt vor Strich" gerechnet werden soll (anstatt jedesmal sofort den Operator anzuwenden).
-
@Th69 sagte in "Rechner" gibt falsches Ergebnis aus:
anstatt jedesmal sofort den Operator anzuwenden - wie es der OP auch in seinem Code bisher macht
Nein.
x = a1 + b1 + c1 - d1 * e1;
verlässt sich auf die C++ Regeln.
-
Habe ich auch gerade gesehen, daher habe ich es oben wegeditiert.
Trotzdem sollte der OP ersteinmal den Code umschreiben...
PS: Ich könnte ja jetzt meinen Mathe-Parser empfehlen, aber das hilft dem OP ja beim Lernen nicht ;-).