Zurück ins Menü



  • hallo,
    ich habe ein Menü: mit verschieden funktionen
    gehe ich zum beispiel in den punkt Optionen rein will ich wieder zurück ins menü
    welche arten gibs da und wie kann ich das machen

    #include <iostream>
    #include <conio.h>
    #include <stdlib.h>
    #include <string>
    
    using namespace std;
    
    int main ()
    {
    
    	char Menü;
    cout<<"\n\t<S>piel Starten\n\t<O>tionen\n\t<N>ame deines Helden\n\t<B>eenden des Spieles";
    do
    	{
    
    	cin>>Menü;
    switch (Menü)
    {	
    	case ('s'):
    	case ('S'):
    	{
    		cout<<"Spiel Startet jetzt";
    
    	}break;
    
    	case ('o'):
    	case ('O'):
    	{
    		cout<<"Optionen";
    
    	}break;
    
    	case ('N'):
    	case ('n'):
    	{
    		cout<<"Optionen\n";
    
    		cout<<"mit tasentrück (oder eine spezielle taste) zurück ins menue\n";
    
    	}break;
    
    	case ('B'):
    	case ('b'):
    	{
    		cout<<"Spiel Beendet jetzt";
    
    	}break;
    
    	default: 
    		{
    
    		}break;
    
    	}
    
    }while ( Menü != 'b' || Menü != 'B');
    
    system("pause");
    return 0;
    }
    

    so danke für eure hilfe
    ronny


  • Mod

    Meinst du so?

    #include <iostream>
    // #include <string>   // Benutzt du gar nicht
    // #include <cstdlib>  // Das heißt cstdlib, nicht stdlib.h. Und system ist doof. Daher: Raus.
    
    using namespace std;
    
    int main ()
    {
    
      char Menu;  // Umlaute in Namen sind doppeldoof
      do
        {
          cout<<"\t<S>piel Starten\n\t<O>tionen\n\t<N>ame deines Helden\n\t<B>eenden des Spieles\n"; // In die Schleife verschoben
    
          cin>>Menu;
          switch (Menu)
            {   
            case ('s'):
            case ('S'):
              {
                cout<<"Spiel Startet jetzt\n";
    
              }break;
    
            case ('o'):
            case ('O'):
              {
                cout<<"Optionen\n";
    
              }break;
    
            case ('N'):
            case ('n'):
              {
                cout<<"Name\n";
    
              }break;
    
            case ('B'):
            case ('b'):
              {
                cout<<"Spiel Beendet jetzt\n";
    
              }break;
    
            default:
              {
    
              }break;
    
            }
    
        }while ( Menu != 'b' && Menu != 'B'); // Hier die Bedingung korrigiert
    
     // system("PAUSE") weggemacht. Gucke FAQ für Alternativen
    
     // return 0;  // In main auch nicht nötig, da default 0 ist. (Sonderfall nur in main!)
    }
    


  • gut danke, aber aber ich gehe immer ins menü zurück wenn die schleife (beispiel optione) abgelaufen ist. ich wollte aber aber mit nem tastendruck wieder ins menü

    (ps die #include befehle habe ich noch benutzt ich habe das programm nur auf das nötigste gelöscht

    und system("pause") brauche ich das sich die console sonst ohne das ich es will schliese


  • Mod

    Na, dann mach an der Stelle eben mehr, als nur "Optionen" auszugeben. Zum Beispiel, warte auf einen Tastendruck. Hättest du dir die Alternativen zu system("Pause") angeguckt, hättest du da auch schon etwas für gefunden.

    http://www.c-plusplus.net/forum/111042



  • @SeppJ was soll ich denn da mehr schreiben ??



  • case ('o'):
            case ('O'):
              {
                cout<<"Optionen\n";
    
               system("pause");
    
              }break;
    

    hast du dir das so vorgestellt


  • Mod

    Jain. Es macht nun das, was du möchtest, oder? Aber system("pause") finde ich nach wie vor doof. Außerdem ist egal, wie ich mir das vorstelle, entscheidend ist doch, was du dir vorstellst und das du in der Lage bist, deine Vorstellungen in Programmcode umzusetzen.



  • nein
    ich will ind den knoten punkten halt meine einstellungen machen und dann mit einer taste (beispiel 'z' << zurück) wieder ins menü und NICHT wenn die schleife ferdig ist
    und ich willte hat wissen ob es das eine funktion oder sowas gibt und ob mir das mal bitte jemand sagt ^^


  • Mod

    Nun, dann mach da deine Einstellungen und wenn z eingegeben wird, dann hörst du mit dem Einstellungsdialog auf. Ich verstehe nicht wo dein Problem damit ist.



  • ich weiß nicht wie ich das mache
    ich suche halt nen befehl / funktion oder sowas



  • leider weiß ich immer noch nicht wie ich zurück ins menü auf befehl komme 😞
    brauch also immer noch hilfe bitte



  • #include <iostream>
    #include <conio.h>
    #include <cstdlib>
    #include <string>
    #include <cstdio>
    
    using namespace std;
    
    void OptFunc();
    
    int main ()
    {
    
        char menu;
    
        do
            {
            cout<<"\n\t<S>piel Starten\n\t<O>tionen\n\t<N>ame deines Helden\n\t<B>eenden des Spieles";
            cin.get(menu);
            fflush(stdin); //cin.clear funktioniert bei mir wundersamerweise nicht... drum verzeih mir diese variante ;)
            switch (menu)
            {
                case ('s'):
                case ('S'):
    
                    cout<<"Spiel Startet jetzt";
                    break;
    
                case ('o'):
                case ('O'):
    
                    cout<<"Optionen";
                    OptFunc();
                    break;
    
                case ('N'):
                case ('n'):
    
                    cout<<"Name aendern.\n";
    
                    break;
    
                case ('B'):
                case ('b'):
    
                    cout<<"Spiel Beendet jetzt";
    
                    break;
    
                default:
    
                break;
    
            }
    
            }while ( menu != 'b' && menu != 'B');
    
        return 0;
    }
    
    void OptFunc()
    {
        char ch;
    
        do
        {
            cout << "Druecken sie...\n<F>: Farbtiefe\n<A>: Aufloesung\n<Z>: Zurueck"; // hier dann einfügen, was man in den optionen ändern kann...
            cin.get(ch);
            fflush(stdin);
            switch(ch)
            {
                case 'a':
                case 'A':
                    break; //Whatever passieren soll...
                case 'f':
                case 'F':
                    break; //Whatever eben passieren soll ;)
            }
        }while (ch != 'z' && ch != 'Z');
    
    }
    

    Ich würde mir für jede Menüauswahl ne eigene Funktion schreiben. Die Funktion von mir verweilt solange in den Optionen bis Z oder z gedrückt wird. Funktioniert übrigens auch mit while(tolower(ch) != 'z');
    Verwende statt

    cin >> menu
    

    lieber

    cin.get(menu);
    

    wenn du nur ein Zeichen einlesen willst. Verzeih mir bitte die Verwendung von

    fflush(stdin);
    

    denn bei mir funktioniert

    cin.clear();
    

    komischerweise nicht. Zumindest nicht so, wie es funktionieren sollte.
    Die Geschweiften Klammern in den case-Labeln kannste dir übrigens sparen. Die machen das ganze nur unübersichtlicher, wie ich finde.



  • AH ok also do while schleife das ist nee idee die ich verwenden kann
    danke
    (und falls jemand ne andere idee hat der kann mir es auch sagen ^^)



  • Matrix..., zu

    //        fflush(stdin);  // => nur, wenn diese "nicht-Standard-C" Variante vom Compiler unterstützt wird -> sonst keine zuverlässige Funktion.
                cin.clear();
                cin.ignore(256, '\n');
    

    ich weiss nicht, ob das immer funktioniert :xmas1:


Anmelden zum Antworten