do while schleife geht nicht



  • hallo bzw guten abend

    folgendes problem ich hab ein menü mit tasten zur auswahl un auf die taste 'b'||'B' soll sich das menü schliesen und nicht wenn ich eine andere drücke

    also ich habe bestimmt jetzt 3 tage gesucht und es klappt einfach net (ich denke ist wieder son typischer anfängerfehler da mir ja noch die routine fehlt )

    #include <iostream>
    using namespace std;
    int main ()
    {
    	//variablen
    	//
    	char Menü, chShip=0, chTest=0;
    	int nautikus=12;
        int enterprise=17;
    
    	//Startbildschirm
    	// 
    	cout<<"(S)piel starten\n\n(B)eenden"<<endl;
    	cin >> Menü;
    do
    {
    	//Taste S oder E drücken 
    	//
    	switch (Menü)
    	{
    
            case ('s'):
    			case ('S'):
    
    		{
    			cout << "Spiel wird gestartet\nviel Glueck!"<<endl;  
    			system("pause");  //mit tastedrück bildschrim leeren 
    			system("cls");
    
    			cout<<"waehle dein schiff\n(N)autikus oder (E)nterpriese\n";
    			cin>>chShip;                  
    			// <<< für nächstes switch befehl
    			//Taste n oder e drücken 
    			//
    			switch (chShip)
    			{
    
    			case ('n'):
    				case ('N'):
    				{	
    					cout<<"nautikus drücke u"<<endl;
    					cin>>chTest;
    					switch (chTest)
    					{
    
    							case ('u'):
    				case ('U'):
    				{
    					cout<<"enterprise"<<endl;
    				}break;
    
    					}
    
    				}break;
    
    		case ('e'):
    		case ('E'):
    				{
    				cout<<"enterprise"<<endl;
    				}break;
    
    			}
    			}
    
    		case ('b'):
    		case ('B'):
    			{
    			cout << "Game wird Beendet!\n";		
    			}break;
    
    default: 
    	//wenn nichts von den gedrückt wird
    	//
    			{
    				cout << "error"<<endl;
    			}break;
    
            	}
    	}while (Menü=!'b' && Menü!='B');
    	// wenn nicht die richtige taste gedrückt wird
    	// 
    
    system("pause");
    return (0);
    }
    

    so ich danke für eure freundlich hilfe


  • Mod

    Da Menü innerhalb der Schleife nie geändert wird, kann die Schleife nie abbrechen.



  • ändere ich menü nicht wenn ich eine taste drücke ??



  • Die Menü-Eingabe muss in die Schleife rein:

    ...
        do
        {
        cout<<"(S)piel starten\n\n(B)eenden"<<endl;
        cin >> Menü;
    
        //Taste S oder E drücken
        //
        switch (Menü)
        { 
    ...
    

    Allerdings wird die Menü-Eingabe 'E' nicht abgefangen.



  • so ich habe jetzt

    cout<<"(S)piel starten\n\n(B)eenden"<<endl;
        cin >> Menü;
    

    IN die do while geschrieben

    drücke ich 'b' kommt meldung spiel beenden und dann schliest fenster ( das ist korreckt)
    drücke ich die 'falsche taste' kommt meldung "error" und close fester
    klappt also immer nicht net


  • Mod

    Maldikus schrieb:

    drücke ich 'b' kommt meldung spiel beenden und dann schliest fenster ( das ist korreckt)
    drücke ich die 'falsche taste' kommt meldung "error" und close fester
    klappt also immer nicht net

    😕 Stell mal deine Frage so:
    1. Auf Deutsch oder in einer anderen Sprache, aber Hauptsache lesbar!
    2. Sag genau, was du gemacht hast.
    3. Sag genau, was du erwartest.
    4. Sag genau, was stattdessen passiert ist.



  • ok sepp
    also es soll eine taste gedrück werden aso s oder b
    s soll die schiffs auswahl starten und b soll das ganze program beenen und NUR wenn ich b drück wenn ich halt eine andere taste drück (beispiel a was je nicht deklariert ist) soll das fenster NICHT geschlossen werden
    sondern nur error und ich kann wieder wählen s oder b (ist ja der sinn einer do while schleife)


  • Mod

    Uhh, der Fehler ist subtil:

    Menu!='b'
    

    Bedeutet: Fall Menu ungleich 'b' ist

    Menu=!'b'
    

    Bedeutet: Weise Menu den Wert "Nicht 'b'" zu.

    Stell die Warnoptionen deines Compilers immer auf Maximum. Behandle Compilerwarnungen wie Fehler.



  • hmm??

    was mache ich da nur??

    danke seppj
    du bist zwar streng aber du verstehst was von diesem thema hier

    ich hatte nur sonderzeichen verwechselt
    jetzt klappt es so wie ich wollte ^^

    danke für die supper schnelle hilfe


Anmelden zum Antworten