Switch & Case - Anfänger braucht Hilfe
-
Mahlzeit,
Ich bin dabei eine Übungsliste durchzugehen.
Die Aufgabe ist recht simpel: Addition zweier Zahlen:
-)Benutzer auffordern
-)Initialisierung im ProgrammDas hab ich mit Switch & Case gemacht, allerdings weiß ich nicht wo der Fehler liegt.
Wenn der Fehler ziemlich einfach ist, bitte ich um Entschuldigung!
Fehler 1 error C2360: Initialisierung von 'Ausgabe' durch 'case'-Marke übersprungen c:\users\mentras\documents\visual studio 2008\projects\visual c++ projects\addition zweier zahlen\addition zweier zahlen\code - datei 1.cpp 21
Fehler 3 error C2360: Initialisierung von 'Zahl1' durch 'case'-Marke übersprungen c:\users\mentras\documents\visual studio 2008\projects\visual c++ projects\addition zweier zahlen\addition zweier zahlen\code - datei 1.cpp 21
Fehler 2 error C2360: Initialisierung von 'Zahl2' durch 'case'-Marke übersprungen c:\users\mentras\documents\visual studio 2008\projects\visual c++ projects\addition zweier zahlen\addition zweier zahlen\code - datei 1.cpp 21
#include <iostream> using namespace std; int main() { cout << "Für das initialisierte Programm (1)" << endl; cout << "Für das benutzerauffordernde Programm (2)" << endl; int auswahl; cin >> auswahl; switch(auswahl) { case 1: int Zahl1=10, Zahl2=20, Ausgabe=Zahl1+Zahl2; cout << "Die erste Zahl ist: " << Zahl1 << endl; cout << "Die zweite Zahl ist: " << Zahl2 << endl; cout << "Das Ergebnis ist: " << Ausgabe << endl; break; case 2: int zahl_1, zahl_2, ergebnis; cout << "Gib die erste Zahl ein:" << endl; cin >> zahl_1; cout << "Gib die zweite Zahl ein:" << endl; cin >> zahl_2; ergebnis=zahl_1+zahl_2; cout << "Ergebnis: " << ergebnis << endl; break; } }
Lg Mentras
-
Falsches Forum: C++ wäre korrekt.
Dein Beitrag wird hoffentlich bald verschoben.
Simon
-
Och herrje, hätte doch auf mein Bauch hören sollen
Sorry,...
Lg Mentras
-
Bitte keine Variablen im Case-Zweig initialisieren...
#include <iostream> using namespace std; int main() { cout << "Fuer das initialisierte Programm (1)" << endl; cout << "Fuer das benutzerauffordernde Programm (2)" << endl; int Zahl1=10, Zahl2=20, Ausgabe=Zahl1+Zahl2; int zahl_1, zahl_2, ergebnis; int auswahl; cin >> auswahl; switch(auswahl) { case 1: cout << "Die erste Zahl ist: " << Zahl1 << endl; cout << "Die zweite Zahl ist: " << Zahl2 << endl; cout << "Das Ergebnis ist: " << Ausgabe << endl; break; case 2: cout << "Gib die erste Zahl ein: "; cin >> zahl_1; cout << "Gib die zweite Zahl ein: "; cin >> zahl_2; ergebnis=zahl_1+zahl_2; cout << "Ergebnis: " << ergebnis << endl; break; } return 0; }
Gruß, Doug_HH
-
Ah,...
Danke Doug_HH
Hätte da noch eine Frage, ist das "return" am Ende notwendig?
Lg Mentras
-
return 0 am Ende der main ist nicht notwendig.
Das Problem mit Variablendeklarationen im case-Zweig kannst du 'umgehen', indem du im Zweig einen neuen Block (geschweifte Klammern) erzeugst:
switch(myVar) { case 1: { int i=0; break; } }
Finde ich besser, als alles oben hin zu klatschen. Natürlich nur, wenn die Variablen auch nur im case-Zweig gebraucht werden (denn die Lebensdauer der Variablen umfasst nur den aktuellen Block).
-
Ah,...
Jap, ich hasse es wenn der Code schlampig ist, danke _matze
So kennt man sich besser aus!
Lg Mentras
-
_matze schrieb:
Finde ich besser, als alles oben hin zu klatschen.
Das oben hin zu klatschen nennt man Globale Variable.
Aber natürlich hast Du recht, die sollte man wenn möglich lokal vereinbaren. *schäm*@Mentras: Das hat aber nix mit Schlampig zu tun, sondern gehört zur Datenkapselung.
Man sollte natürlich anfangen, auch bei kleinen Programmen wie Deins, die Datenkapselung zu berücksichtigen.So Lokal wie möglich, so Global wie nötig.
Ein Spruch noch aus der Schule, sitzt aber leider nicht immer.#include <iostream> using namespace std; int main() { cout << "Fuer das initialisierte Programm (1)" << endl; cout << "Fuer das benutzerauffordernde Programm (2)" << endl; int auswahl; cin >> auswahl; switch(auswahl) { case 1: { int Zahl1=10, Zahl2=20, Ausgabe=Zahl1+Zahl2; cout << "Die erste Zahl ist: " << Zahl1 << endl; cout << "Die zweite Zahl ist: " << Zahl2 << endl; cout << "Das Ergebnis ist: " << Ausgabe << endl; break; } case 2: { int zahl_1, zahl_2, ergebnis; cout << "Gib die erste Zahl ein: "; cin >> zahl_1; cout << "Gib die zweite Zahl ein: "; cin >> zahl_2; ergebnis=zahl_1+zahl_2; cout << "Ergebnis: " << ergebnis << endl; break; } } }
-
Den Satz muss ich mir merken
Danke Doug_HH und _matze !
Lg Mentras
-
Wenn man es denn wirklich sauber lösen will packt man den jeweiligen Casezweig in eine Funktion und ruft diese dann auf. So ist es einfach nur schöner Murks - spätestens wenn auf diese Art Auswahl 7 8 oder 9 dazu kommen wirds sehr unübersichtlich.
Das oben hin zu klatschen nennt man Globale Variable.
#include <iostream> using namespace std; int main() { cout << "Fuer das initialisierte Programm (1)" << endl; cout << "Fuer das benutzerauffordernde Programm (2)" << endl; int Zahl1=10, Zahl2=20, Ausgabe=Zahl1+Zahl2; int zahl_1, zahl_2, ergebnis; int auswahl; cin >> auswahl; switch(auswahl) { case 1: cout << "Die erste Zahl ist: " << Zahl1 << endl; cout << "Die zweite Zahl ist: " << Zahl2 << endl; cout << "Das Ergebnis ist: " << Ausgabe << endl; break; case 2: cout << "Gib die erste Zahl ein: "; cin >> zahl_1; cout << "Gib die zweite Zahl ein: "; cin >> zahl_2; ergebnis=zahl_1+zahl_2; cout << "Ergebnis: " << ergebnis << endl; break; } return 0; }
Ich sehe hier keine globalen Variablen. Ich denke einer von uns sollte noch mal die Grundlagen durchlesen.
-
Stimmt Knuddlbear...Die waren nicht Global, sondern nur in der Main gültig.
Über eine Funktion kann man wirklich nachdenken, wenn da mehr Einträge dazukommen.
Wird es hier wohl nicht werden, das Programm liegt ja kurz hinter "Hello World" und wird bestimmt nicht weiter ausgebaut und vermarktet.Bin kurz im Keller und hole mein Grundlagenbuch.
#include <iostream> using namespace std; int Zahl1=10, Zahl2=20, Ausgabe=Zahl1+Zahl2; int zahl_1, zahl_2, ergebnis; int auswahl; int main() {
Jetzt sind sie Global...