Welche der beiden Möglichkeiten ist "saubererer" Code?
-
Hallo. Ich wollte Euch fragen, was der "bessere" Code von beiden ist:
1. mit einer
for-Schleife:#include <iostream> using namespace std; int main() { char Nochmal = 'n'; do { system("cls"); cout << "Taschenrechner:\nGeben Sie eine Zahl, den Operanden und die andere Zahl ein:\n"; double zahl1 = 0.0, zahl2 = 0.0; char Operator; cin >> zahl1 >> Operator >> zahl2; switch(Operator) { case '*': cout << "Ergibt: " << zahl1*zahl2 << endl; break; case '+': cout << "Ergibt: " << zahl1+zahl2 << endl; break; case '-': cout << "Ergibt: " << zahl1-zahl2 << endl; break; case '/': cout << "Ergibt: " << zahl1/zahl2 << endl; break; } for(;;) { cout << "Nochmal? (j/n)"; cin >> Nochmal; if(Nochmal == 'j' || Nochmal == 'J') break; else if(Nochmal == 'n' || Nochmal == 'N') { return EXIT_SUCCESS; } else { cout << "Falsche Eingabe" << endl; } } }while(1); }2. mit
goto:#include <iostream> using namespace std; int main() { char Nochmal = 'n'; do { system("cls"); cout << "Taschenrechner:\nGeben Sie eine Zahl, den Operanden und die andere Zahl ein:\n"; double zahl1 = 0.0, zahl2 = 0.0; char Operator; cin >> zahl1 >> Operator >> zahl2; switch(Operator) { case '*': cout << "Ergibt: " << zahl1*zahl2 << endl; break; case '+': cout << "Ergibt: " << zahl1+zahl2 << endl; break; case '-': cout << "Ergibt: " << zahl1-zahl2 << endl; break; case '/': cout << "Ergibt: " << zahl1/zahl2 << endl; break; } marke:; cout << "Nochmal? (j/n)"; cin >> Nochmal; if(Nochmal == 'j' || Nochmal == 'J') ; else if(Nochmal == 'n' || Nochmal == 'N') { return EXIT_SUCCESS; } else { cout << "Falsche Eingabe" << endl; goto marke; } }while(1); }
-
Ach Mist, falsches Forum...
Vergebt mir...

-
Weder noch. Sauber wäre eine bool'sche Variable (int in C, bool in C++) die angibt ob weitergemacht werden soll. Diese ist Bestandteil des Schleifen-Ausdrucks.
Weder ein return aus der Mitte der Funktion, noch ein goto sind sauberer Code.
-
Janjan schrieb:
Weder noch.
Sehe ich auch so.
Janjan schrieb:
Sauber wäre eine bool'sche Variable
Sehe ich nicht so.
return ist sehr stark und die dahingehende bewußte Abkehr von der Strukturierten Programmierung ist fast immer ein Gewinn.
Hier würde ich eventuell die Frage inclusive Idiotenschleife auslagern und die gesuchte bool-Variable für die Hauptschleife würde der Rückgabewert sein. Könnte sich hübsch anfühlen, aber genau weiß man das immer erst, wenn man es ausprogrammiert hat, fürchte ich.
-
Janjan schrieb:
Weder noch. Sauber wäre eine bool'sche Variable (int in C, bool in C++) die angibt ob weitergemacht werden soll. Diese ist Bestandteil des Schleifen-Ausdrucks.
Weder ein return aus der Mitte der Funktion, noch ein goto sind sauberer Code.
Praktisch so?
#include <iostream> using namespace std; int main() { char Nochmal = 'n'; bool schalt = false; do { system("cls"); cout << "Taschenrechner:\nGeben Sie eine Zahl, den Operanden und die andere Zahl ein:\n"; double zahl1 = 0.0, zahl2 = 0.0; char Operator; cin >> zahl1 >> Operator >> zahl2; switch(Operator) { case '*': cout << "Ergibt: " << zahl1*zahl2 << endl; break; case '+': cout << "Ergibt: " << zahl1+zahl2 << endl; break; case '-': cout << "Ergibt: " << zahl1-zahl2 << endl; break; case '/': cout << "Ergibt: " << zahl1/zahl2 << endl; } cout << "Nochmal? (1 = j/0 = n)"; cin >> schalt; }while(schalt); }
-
Immerhin hast du 10 Zeilen eingespart ...
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Versuche die Ein-/Ausgabe von der Funktionalität zu trennen, am besten schiebst du die Funktionalität in eine Funktion, dann lässt sich das sicher übersichtlicher schreiben.
MfG SideWinder
-
skullyan schrieb:
system("cls");