do Anweisung
-
Hallo Leute. Ich habe diese Aufgabe gehabt
Lernziele
Sie sollen die do-Anweisung einsetzen können, um ein Menü und dazu gehörige Anweisungen so lange auszuführen, bis der Benutzer das Programm beenden möchte. In der konkreten Aufgabenstellung muss zu diesem Zweck die do-Schleife in Verbindung mit einer switch- und einer if-Anweisung verwendet werden.
Aufgabenstellung
Schreiben Sie ein Programm, welches folgende Anforderungen erfüllt:Nachdem der Anwender eine Fließkommazahl angegeben, erscheint dieses Menü:
1 - neue Zahl einlesen 2 - Wurzel berechnen 3 - Quadrat berechnen 4 - Betrag ermitteln E - Programm beenden
Wird der zweite Menüpunkt ausgewählt, erscheint eine entsprechende Fehlermeldung, wenn die Wurzel einer negativen Zahl berechnet werden soll.Wählt der Anwender den letzten Menüpunkt, wird gefragt, ob das Programm wirklich beendet werden soll.
Das Menü wird solange durchlaufen, bis der Anwender den letzten Menüpunkt auswählt und bestätigt.
Ich habe das zusammen geschrieben:
#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { double a; cout << " Geben Sie eine Zahl ein"; cin >> a; cout << "Q - Quadrat?" << endl << "W - Wurzel?" << endl << "B - Betrag?" << endl << "E - Programm beenden" << endl << "N - Neue Zahl" << endl << endl << "Ihre Wahl: "; do { char wahl; cin >> wahl; if ('Q' == wahl) cout << "Quadrat: " << pow(a,2); else if ('W' == wahl) cout <<" Wurzel: " << sqrt(a); else if ('B' == wahl) cout << "Betrag: " << abs(a); else if ('E' == wahl) cout << "Programm beendet."; else cout << "Unzulaessige Eingabe, " << "Programm beendet."; cout << "Andere Zahl (J/N)? "; char antwort; cin >> antwort; while (antwort != 'J' && antwort != 'j'); else // Fehler if ('N' == wahl) {cout << " Geben Sie eine Zahl ein"; cin >> a;} system("PAUSE"); return 0; }zeigt mir immer den Fehler an
52 expected primary-expression before "else"
52 expected;' before "else" 61 expectedwhile' at end of input
61 expected(' at end of input 61 expected primary-expression at end of input 61 expected)' at end of input
61 expected;' at end of input 61 expected}' at end of inputIch hoffe ihr könnt mir helfen, danke
:xmas1:
-
Du solltest öfter { und } benutzen.
-
Ich sehe keine if Abfrage für das else in 52?! Es steht nur ein einfaches else.
Für solche verschachtelten if/else Abfragen, gibt es wie in der Aufgabe vorgegeben, das switch-statement:http://www.proggen.org/doku.php?id=c:switch
Und wie Manni sagt, so {} können einem schon gut helfen

-
Wie schon erwähnt, solltest Du Deine Bedingungen so klammern:
if(...) { ... } else { ... }Ohne diese Klammern gehört zum jeweiligen if oder else immer nur genau die nächste Anweisung. Die Klammern hingegen erzeugen einen ganzen Anweisungsblock, der dann zum if bzw. else gehört.
Diese wilde if - Verschachtelei in Deinem Programm lässt sich aber wohl sowieso durch ein switch/case - Konstrukt übersichtlicher formulieren.
-
Du hast ein else ohne vorangegangenes if.
Kauf dir ein Buch oder schau dir ein Tutorial an und lerne, wie die if-Anweisung funktioniert. Wenn du programmieren willst, musst du präzise sein. Das ist leider nicht wie mit der deutschen Sprache, bei der du durchaus einiges falsch schreiben kannst und man dich trotzdem versteht. Beim Programmieren musst du die Grammatik beherrschen, sonst geht gar nichts. :xmas1:
Und deine Einrückung hilft leider auch nicht, sondern verwirrt nur. Rücke ein, wenn ein Block (if, while, do...) beginnt. Gehe zurück, wenn der Block endet. Mit der richtigen Einrückung hättest du den Fehler eventuell selbst bemerkt.