[C++] Switch mit char problem

gbNiNjA

New member
Tach!
also gleich mal zum Problem ^^:
Versuche ein Consolen-Taschenrechnersystem zu basteln und hab jetzt nur mal das Hauptprogramm geschrieben.

Hier mal Code:
Code:
#include <iostream>
using namespace std;

// Hauptmenu
void hauptmenu() {
	cout<<endl<<" -Hauptmenu:"<<endl;
	cout<<"  'g' => Geometrie-Rechnungen!"<<endl;
	cout<<"  'a' => Algebra-Rechnungen!"<<endl;
	cout<<"  's' => sonstige Rechnungen!"<<endl;
	cout<<"  'm' => Dieses Menu anzeigen"<<endl;
	cout<<"  'q' => Beenden!"<<endl<<endl;
}

// Hauptprogramm
int main() {
	char c='m';

	hauptmenu();

	while(c!='q') {
		cout<<" >> ";
		cin >> c;
		switch(c) {
			case 'g':
				cout<<"  hier kommt geozeugs"<<endl<<endl;
				break;
			case 'a':
				cout<<"  hier kommt algzeugs"<<endl<<endl;
				break;
			case 's':
				cout<<"  hier kommt ka"<<endl<<endl;
				break;
			case 'm':
				hauptmenu();
				break;
			case 'q':
				break;
			default:
				cout<<"   Keine gueltige Eingabe! 'm' fuer Befehlsmenu!"<<endl<<endl;
				break;
		}
	}
	return 0;
}
Funktioniert alles wunderbar, nur wenn ich jetzt statt ein Buchstabe mehrere Buchstaben eingebe führt er alle Buchstaben nacheinander aus! Warum? hab doch eigendlich in jedem Case ein "break;" drinne. Versteh ich nicht.. Mit Arrays funktionierts auch nicht..
Im Anhang die kompilierte exe

danke im voraus.
 

Anschar

New member
Hi gbNiNjA,
versuch das mal:

Code:
#include <iostream>
using namespace std;

// Hauptmenu
void hauptmenu() {
	cout<<endl<<" -Hauptmenu:"<<endl;
	cout<<"  'g' => Geometrie-Rechnungen!"<<endl;
	cout<<"  'a' => Algebra-Rechnungen!"<<endl;
	cout<<"  's' => sonstige Rechnungen!"<<endl;
	cout<<"  'm' => Dieses Menu anzeigen"<<endl;
	cout<<"  'q' => Beenden!"<<endl<<endl;
}

// Hauptprogramm
int main() {
	char c[1]={'m'};

	hauptmenu();

	while(c[0]!='q') {
		cout<<" >> ";
		cin >> c;
		switch(c[0]) {
			case 'g':
				cout<<"  hier kommt geozeugs"<<endl<<endl;
				break;
			case 'a':
				cout<<"  hier kommt algzeugs"<<endl<<endl;
				break;
			case 's':
				cout<<"  hier kommt ka"<<endl<<endl;
				break;
			case 'm':
				hauptmenu();
				break;
			case 'q':
				break;
			default:
				cout<<"   Keine gueltige Eingabe! 'm' fuer Befehlsmenu!"<<endl<<endl;
				break;
		}
	}
	return 0;
}

mfG
Anschar
 

gbNiNjA

New member
hi Anschar. Danke für die Hilfe, es funktioniert! :)
Als ich mit Arrays probiert habe, habe ichs mit "cin>>c[0];" gemacht. Grad auch probiert aber funzt nur mit "cin>>c;". Würde auch gerne verstehen, warum das so ist >.<

edit: mit der methode kommt bei 'q' wenn ichs eingebe syntax error:
Code:
Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
:/

edit2: wenn ich char c[2] bzw höher als 1 setze kommt der error nicht solange ich im Programm nicht mehr als die definierte Menge an Buchstaben eingebe.. wie immer ich versteh das nit ^^ eigendlich is das ja egal aber ich neige dazu codes perfekt zu gestalten ^^
 
Oben