C++ Rechner Fehler
-
ICh hab noch nie ein Menü programmiert xD
expected init-declarator before "int"
-
In den Zeilen 9, 45, 59, 73, 87 und 101 fehlt eine { und in den Zeilen 43, 57, 71, 85 und 99 fehlt eine }. Die Variable
geteiltwird nie initialisiert und die Variablenplus,minusundmalwerden nicht initialisiert, wenn dieeingabe!=1 ist.
Im else-Teil der Abfrage if(eingabe==1) sollte die Schleife abgebrochen werden.Gruß
Werner
-
Da fehlt die öffnende Klammer für die main()-Funktion (Zeile 9) - und womglich noch ein paar weitere Klammern.
Zum Menü:
cout << "Plus rechnen <1>" << endl; cout << "Minus rechnen <2>" << endl; cout << "Mal rechnen <3>" << endl; cout << "Geteilt rechnen <4>" << endl; cin >> eingabe; switch(eingabe) { case 1: // addieren break; ... }(wobei man statt des switch auch eine if-else-Kaskade verwenden könnte, wenn man will)
Außerdem kannst du den Teil zur Eingabe der Operanden ("erste Ganzzahl" und "zweite Ganzzahl") vor diesem switch durchführen, die ist ja für alle Operationen identisch.
-
Ok ich danke für die Hilfe
-
Ich hab das Programm normal ganz neu programmiert.
Das Menü klappt auch einwandfrei.
Und die Zahlen kann ich auch eintippen.
Nur wenn ich z.B auf 1 für addieren im Menü eingebe und meine Ganzzahlen eintippe.
Rechnet mir das Programm die Zahlen nicht aus.
Das ist bei den anderen 3 mathematischen Operatoren genauso.//Rechner #include <cstdlib> #include <iostream> using namespace std; int main() { int zahl1; int zahl2; int eingabe; int ergebniss; cout << "Plus rechnen <1>" << endl; cout << "Minus rechnen <2>" << endl; cout << "Mal rechnen <3>" << endl; cout << "Geteilt rechnen <4>" << endl; cin >> eingabe; switch (eingabe) { case 1: cout << "Geben sie die erste Ganzzahl ein: " << endl; // Addition cin >> zahl1; cout << "Geben sie die zweite Ganzzahl ein: " <<endl; cin >> zahl2; ergebniss = zahl1 + zahl2; break; case 2: cout << "Geben sie die erste Ganzzahl ein: " << endl; // Subtraktion cin >> zahl1; cout << "Geben sie die zweite Ganzzahl ein: " <<endl; cin >> zahl2; ergebniss = zahl1 - zahl2; break; case 3: cout << "Geben sie die erste Ganzzahl ein: " << endl; //Multiplikation cin >> zahl1; cout << "Geben sie die zweite Ganzzahl ein: " <<endl; cin >> zahl2; ergebniss = zahl1 * zahl2; break; case 4: cout << "Geben sie die erste Ganzzahl ein: " << endl; // Division cin >> zahl1; cout << "Geben sie die zweite Ganzzahl ein: " <<endl; cin >> zahl2; ergebniss = zahl1 / zahl2; break; } system("PAUSE"); return EXIT_SUCCESS; }
-
Vielleicht solltest du das Ergebnis noch ausgeben?

PS: Deine Formatierung schaut aus wie bei Hempels unterm Sofa. Versuche, immer schön einzurücken... dann findet man Fehler auch viel schneller. Und zu viele Leerzeilen sind genauso wenig angebracht wie gar keine.
PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?
-
Danke manchmal bin ich schon ein bischen neben der Spur.
Mach ich
-
Gugelmoser schrieb:
PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?
Falls ja, solltest du dir eine andere IDE (Code::Blocks oder Visual C++ 2010 Express) zulegen, da Dev-C++ veraltet ist, ein paar Bugs hat und nicht mehr weiterentwickelt wird.
-
Weswegen sehe ich eigentlich so oft ergebnis mit 2 "s"? Wobei ich ja result sowieso schöner finde

-
wxSkip schrieb:
Wobei ich ja result sowieso schöner finde

Ich nicht. Lateinische Wörter sind immer so seltsam in der Aussprache.
-
Ich weise nochmal auf den letzten Satz in meinem vorigen Beitrag hin:
CStoll schrieb:
Außerdem kannst du den Teil zur Eingabe der Operanden ("erste Ganzzahl" und "zweite Ganzzahl") vor diesem switch durchführen, die ist ja für alle Operationen identisch.
Du hast insgesamt vier mal den selben Code zur Eingabe der Operanden, sowas sollte man vermeiden, weil es nur den Code aufbläht und fehleranfällig ist.
-
CStoll schrieb:
Du hast insgesamt vier mal den selben Code zur Eingabe der Operanden, sowas sollte man vermeiden, weil es nur den Code aufbläht und fehleranfällig ist.
Stimmt - man kann das wesentlich kürzer fassen. Auch was die Eingabe des Anwenders betrifft. Warum soll der denn zwischen 1,2,3 oder 4 wählen wenn er auch +,-,* und / eingeben kann:
#include <algorithm> // std::find #include <iostream> struct BinaryOperation { template< typename T > T operator()( T a, T b ) const { switch( m_op ) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; } return T(); } friend std::istream& operator>>( std::istream& in, BinaryOperation& op ) { const char OPS[] = "+-*/"; if( in >> op.m_op && std::find( OPS, OPS+sizeof(OPS), op.m_op ) == OPS+sizeof(OPS) ) in.setstate( std::ios_base::failbit ); return in; } friend std::ostream& operator<<( std::ostream& out, BinaryOperation op ) { return out << op.m_op; } private: char m_op; }; int main() { using namespace std; cout << "Plus rechnen: zahl1+zahl2 z.B. 3+4" << endl; cout << "Minus rechnen: zahl-zahl2 z.B. 45-12" << endl; cout << "Mal rechnen: zahl1*zahl2 z.B.: 12*71" << endl; cout << "Geteilt rechnen: zahl1/zahl2 z.B.: 34/2" << endl; BinaryOperation op; for( int zahl1, zahl2; cout << "\nIhre Rechnung: ", cin >> zahl1 >> op >> zahl2; ) cout << zahl1 << op << zahl2 << " = " << op( zahl1, zahl2 ) << endl; return 0; }Führt z.B. zu folgendem Dialog:
Plus rechnen: zahl1+zahl2 z.B. 3+4 Minus rechnen: zahl-zahl2 z.B. 45-12 Mal rechnen: zahl1*zahl2 z.B.: 12*71 Geteilt rechnen: zahl1/zahl2 z.B.: 34/2 Ihre Rechnung: 1+1 1+1 = 2 Ihre Rechnung: 4893/7 4803/7 = 699 Ihre Rechnung: 123-24 123-24 = 99Gruß
Werner
-
Danke noch mal für das Beispiel!
Gugelmoser schrieb:
PPS: Kann es zufällig sein, dass du Dev-C++ verwendest?
Ja ich benutze Dev C++!
-