C++ Switch Case funktioniert nicht?
Moin, wenn ich bei dem letzen Switch ganz unten "M" eingebe, schließt sich das Programm einfach. Ich verstehe nicht was falsch ist, Menu ist angegeben, der break; ist da... Bitte hilfe :)
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main()
{
int Number1 = 0, Number2 = 0;
int Result = 0;
int SelectionMenu = 0;
int SelectionAdd = 0;
Menu:
{
cout << "Welcome to the Calculator!\n";
Sleep(1000);
while (_kbhit())
_getch();
cout << "1 - Add\n";
cout << "2 - Subtract\n";
cout << "3 - Multiply\n";
cout << "4 - Divide\n";
Sleep(500);
while (_kbhit())
_getch();
cin >> SelectionMenu;
switch (SelectionMenu)
{
case('1'): goto Add;
break;
}
}
Add:
{
cout << "\nYou are now adding!\n";
Sleep(500);
cout << "Please insert the first number.\n";
cin >> Number1;
cout << "Please insert the second number.\n";
cin >> Number2;
Result = Number1 + Number2;
cout << "Calculating";
cout << ".";
Sleep(500);
cout << ".";
Sleep(500);
cout << ".";
Sleep(500);
cout << "\n" << Number1<< " plus " << Number2 << " is " << Result << "!\n";
Sleep(2000);
cout << "\nType M to go back to the menu or type E to exit the programm.\n";
cin >> SelectionAdd;
switch (SelectionAdd)
{
case('M') :
{
goto Menu;
break;
}
case('E') :
{
exit(1);
break;
}
}
}
return 0;
}
Ergänzung: Beachtet nicht das mit dem "sleep" und dann den Punkten, ich weiss das geht deutlich effizienter xD
Ist euch ausdrücklich gesagt worden, dass ihr goto verwenden sollt?
Nö, hab es halt einfach mal benutzt, hat ja beim ersten goto (goto Add) auch gut funktioniert.
2 Antworten
Hast du das Programm schon mal im Debugger Schritt für Schritt ausführen lassen?
Insbesondere die Eingabe von SelectionAdd?
Was würdest du erwarten, wenn du etwas Anderes als 'M' oder 'E' eingibst? (Der switch-Block hat keinen default-Zweig).
Ich hab da statt 'M' 77 eingegeben und bin wieder bei Menü gelandet. Kannst du dir denken, woran das liegen könnte?
(Tipp: Auf die Zahl 77 bin ich über
(int)'M'
im Direktfenster gekommen.)
(Tipp: C++ hat von C die Unsitte übernommen, auf Typsicherheit weitestgehend zu verzichten. Insbesondere ist ein char dasselbe wie ein signed int.)
Zu goto: Nimm das nur, wenn du ganz genau weißt, was du da tust. Also als Anfänger: niemals.
Du hast schon while-Schleifen und switch-Auswahlen in deinem Code. Warum nimmst du sie nicht auch für die anderen Schleifen und Verzweigungen?
Kennst du auch "Unterprogramme"/"Funktionen"/"Methoden"?
(Allerdings scheint cin mitzukriegen, ob eine gültige Zahl eingegeben wurde.)
SelectionAdd muss vom Typ char (nicht int) sein.
Wenigstens solange es keine (optionale) vernünftige Typsicherheit gibt, bin ich der Ansicht, dass C/C++ keine anfängergeeignete Sprache ist.
danke, dass ich da nicht drauf gekommen bin...