Warum funktioniert dieses Programm net?^^
-
Hallo,
Ich habe eine Frage und zwar: Ich habe einen kleinen "Rechner" programmiert (mein erstes Programm), allerdings funktioniert dieser leider nicht wie geplant, es kommt zwar keine Fehlermeldung oder so, aber immer wenn ich das Programm ausführe und 2 Zahlen addiere oder so kommt immer das Gleiche raus, eine total unlogische Zahl. Ich gebe euch mal den Quellcode, pls help me^^#include <iostream> #include <string> #include <cmath> using namespace std; int main() { double Zahl1; // Erste Zahl double Zahl2; // Zweite Zahl int Frage; // Siehe 3. cout double Ergebnis; // Ergebnis aus Zahl1 & Zahl 2 cout << "Geben Sie die erste Zahl ein" << endl; cin >> Zahl1; cout << "Geben Sie die zweite Zahl ein" << endl; cin >> Zahl2; cout << "Wollen Sie addieren (1) , subtrahieren (2) , multiplizieren (3) oder dividieren(4) ?" << endl; cin >> Frage; if (Frage == 1 ) { Ergebnis == Zahl1 + Zahl2; cout << Ergebnis << endl; } if (Frage == 2 ) { Ergebnis == Zahl1 - Zahl2; cout << Ergebnis << endl; } if (Frage == 3 ) { Ergebnis == Zahl1 * Zahl2; cout << Ergebnis << endl; } if (Frage == 4 ) { Ergebnis == Zahl1 / Zahl2; cout << Ergebnis << endl; } return 0; }
-
Schreib anstatt Ergebnis == Zahl1 + Zahl2; mal Ergebnis = Zahl1 + Zahl2;
Und das analog bei den anderen Grundrechenarten auch.
Ein Gleichheitszeichen weist zu, zwei Stück vergleichen.
Ach ja, was passiert, wenn ich 5 oder -8715 bei der Auswahl der Rechenart eingebe
?MfG
GPC
-
Vielen Dank für die schnelle Hilfe, wie gesagt, hab kaum ahnung und versuch mir das auch selbst beizubringen, also c++

-
Und einfacher als if ist der switch befehl
#include <iostream> #include <string> #include <cmath> using namespace std; int main() { double float Zahl1; // Erste Zahl double float Zahl2; // Zweite Zahl int Frage; // Siehe 3. cout double float Ergebnis; // Ergebnis aus Zahl1 & Zahl 2 (mach ein float rein //dann kannst komma zahlen benutzen! cout << "Geben Sie die erste Zahl ein" << endl; cin >> Zahl1; cout << "Geben Sie die zweite Zahl ein" << endl; cin >> Zahl2; cout << "Wollen Sie addieren (1) , subtrahieren (2) , multiplizieren (3) oder dividieren(4) ?" << endl; cin >> Frage; switch (Frage) { case 1: { Ergebnis = Zahl1 + Zahl2; cout << Ergebnis << endl; break; } case 2: { Ergebnis = Zahl1 - Zahl2; cout << Ergebnis << endl; break; } case 3: { Ergebnis = Zahl1 * Zahl2; cout << Ergebnis << endl; break; } case 4: { Ergebnis = Zahl1 / Zahl2; cout << Ergebnis << endl; break; } default: { cout<<"ERROR"; //Falls nix von 1-4 eingetippt wurde ;) break; } }
-
Dying schrieb:
Und einfacher als if ist der switch befehl
Wenn man ihn denn anzuwenden weiß. Die Klammern sind über, das ein oder andere break wäre aber nicht schlecht. Und in jedem case ein und dieselbe Ausgabe zu machen, ist auch nicht sonderlich sinnvoll.
-
hups habs vergessen

aber was wäre wenn man 5 eingäbe
und außerdem find ich das übersichtlicher...
-
Ein wenig gekürzt...
#include <iostream> #include <string> #include <cmath> #include <conio.h> using namespace std; int main() { double Zahl1, Zahl2; int Frage; cout << "Geben Sie die erste Zahl ein: " << endl; cin >> Zahl1; cout << "Geben Sie die zweite Zahl ein: " << endl; cin >> Zahl2; cout << "Rechenoperation:\n1.) Addieren\n2.) Subtrahieren\n3.) Multiplizieren\n4.) Dividieren\nWahl:" << endl; cin >> Frage; switch (Frage){ case 1:{ Zahl1 += Zahl2; break; } case 2:{ Zahl1 -= Zahl2; break; } case 3:{ Zahl1 *= Zahl2; break; } case 4:{ Zahl1 /= Zahl2; break; } default:{ Zahl1=0; break; } } cout<<"Ergebnis: "<<Zahl1<<endl; getch(); return 0; }Dazu solltest du vielleicht auch noch eine Schleife einbauen damit man immer wieder Berechnungen durchführen kann

MfG Kuldren
-
und jetzt die 1337-version:
#include <iostream> #include <conio.h> using namespace std; typedef double (*opfunc_t) (const double&, const double&); double opAdd (const double& op1, const double& op2) { return (op1 + op2); } double opSub (const double& op1, const double& op2) { return (op1 - op2); } double opMul (const double& op1, const double& op2) { return (op1 * op2); } double opDiv (const double& op1, const double& op2) { return (op1 / op2); } struct operator_t { opfunc_t op; const char* name; }; const operator_t operators[] = { {opAdd, "Addieren"}, {opSub, "Subtrahieren"}, {opMul, "Multiplizieren"}, {opDiv, "Dividieren"} }; int main (void) { double op1, op2; unsigned int op; cout << "Geben Sie den ersten Operanden ein: " << endl; cin >> op1; cout << "Geben Sie den zweiten Operanden ein: " << endl; cin >> op2; cout << "Rechenoperation:" << endl; for (int n = 0; n < sizeof (operators) / sizeof (operator_t); ++n) cout << n + 1 << ".) " << operators[n].name << endl; cout << "Wahl: "; cin >> op; --op; if (op > sizeof (operators) / sizeof (operator_t)) { cerr << "Fehler: ungueltige Operation!" << endl; getch (); return (1); } cout << "Ergebnis: " << operators[op].op (op1, op2) << endl; getch (); return (0); }*scnr*
-
Hallo
Angeber

chrische
-
1338-h4xx0r schrieb:
und jetzt die 1337-version:
...Naja, für eine "1337-Version" sind mir da zuviele "op"s drin ... mal für "Operator", mal für "Operation", mal für "Operand", .....
Sowas "operators[op].op (op1, op2)" ist nicht wirklich sprechend.Außerdem habe ich den "++"-Anteil im C-Programm nicht gefunden.
:pGruß,
Simon2.
-
Die streams sind doch das ++