Menü



  • HI!

    #include <iostream.h>
    #include <clx.h>
    
    int iAuswahl;
    
    int main() {
    
    cin >> iAuswahl;
    
    while (iAuswahl != 4)
     { // while
    
    switch (iAuswahl)
      { // switch
    
    case 1:
    cout <<"A";
    break;
    
    case 2:
    cout <<"B";
    break;
    
    case 3:
    cout <<"C";
    break;
    
      } // End switch
     } // End while
    
    system("pause");
    return 0;
    }
    

    Das soll ein "Menü", gaaaaaaanz grob werden...

    Wenn ich 1 eintippe soll A erscheinen
    Wenn ich 2 eintippe soll B erscheinen
    Wenn ich 3 eintippe soll C erscheinen...

    Aber bei "cin >>" geht das nicht so, wie ich will... Gibt es da ein Befehl der SOFORT auf die eingabe reagiert, ohne das ich noch Enter drücken muss??

    Mein Code oben ist eine Endlosschleife, aber ich weiss nicht warum, die while Schleife soll überprüfen, ob ich was eingegeben habe...

    ABER: Bei dem Code soll auch A,B und C an der selben stelle erscheinen - es soll da z.b. kein

    A
    B
    C

    stehen!

    Hab auch mal probiert, dass ein "string" ersetzt wird...

    Wie könnte ich das machen?? 🙄 😕 :xmas1: :xmas2:



  • Du hast eine Endlosschleife, weil du nur einmal eine Zahl einliest.

    Mit kbhit() kannst du prüfen, ob etwas eingegeben wurde. Die Funktion liefert 0 zurück, wenn nichts eingegeben wurde, ansonsten einen Wert ungleich 0. Das Zeichen kannst du dann gleub ich mit getch() einlesen. Ich hab die Funktionen noch nie benutzt, deshalb geb ich kein Gewähr.



  • Mein Code oben ist eine Endlosschleife, aber ich weiss nicht warum, die while Schleife soll überprüfen, ob ich was eingegeben habe...

    du musst die auswahl in die while schleife machen..

    while (iAuswahl != 4) 
    { // while 
    cin >> iAuswahl;
    //bla
    

    ABER: Bei dem Code soll auch A,B und C an der selben stelle erscheinen

    könnte man lösen, indem man

    system("cls");
    

    einbindet.. würde dann so aussehen:

    while (iAuswahl != 4) 
    { // while 
    cin >> iAuswahl;
    system("cls");
    // bla
    

    ich würde dann auch hinter jeder ausgabe noch folgendes einfügen:

    cout<<endl;
    

    dann siehts besser aus..

    Aber bei "cin >>" geht das nicht so, wie ich will... Gibt es da ein Befehl der SOFORT auf die eingabe reagiert, ohne das ich noch Enter drücken muss??

    das würd ich auch gern wissen 🙂

    du solltest dir angewöhnen, anstatt

    #include <iostream.h>
    

    lieber

    #include <iostream>
    using namespace std;
    

    zu schreiben..



  • #include <iostream.h> 
    #include <clx.h>
    #include <conio.h>
    int iAuswahl;
    
    int main() {
    textcolor (12);
    
    cin >> iAuswahl;
    
    while (iAuswahl != 4)
    {
    cin >> iAuswahl;
    system("cls");
    
    switch (iAuswahl) {
    
    case 1:
    textbackground (7);
    cprintf ("PUNKT 1");
    textbackground(10);
    cprintf("    PUNKT 2     PUNKT 3                                                  ");
    break;
    
    case 2:
    textbackground (10);
    cprintf ("PUNKT 1    ");
    textbackground (7);
    cprintf ("PUNKT 2");
    textbackground(10);
    cprintf ("     PUNKT 3                                                  ");
    break;
    
    case 3:
    textbackground (10);
    cprintf ("PUNKT 1    ");
    cprintf ("PUNKT 2     ");
    textbackground (7);
    cprintf ("PUNKT 3");
    textbackground (10);
    cprintf ("                                                  ");
    break; 
    
      } // End switch 
     } // End while 
    
    system("pause"); 
    return 0; 
    }
    

    Besser krieg' ichs nich hin, ohne dass man Enter Drücken muss...

    Also wenn ich 1 Drück ist Punkt 1 Anderfarbig hervorgehoben... u.s.w.

    Hmmm - Wer von euch weiss, wie man das mit Pfeiltasten Navigierbar macht?

    Nacht :xmas1: 🙂



  • hi,
    wie gesagt mit kbhit() und getch() könntest du einzelne Tasten abfangen, ohne das die Entertaste betätigt werden muss.
    Für die Navigation mit den Pfeiltasten, könntest du folgendes machen:

    #include <conio.h> // für kbhit() und getch()
    
    // weiterer Code
    
    unsigned char ch;
    
    for(;;) // Endlosschleife
    {
      if(kbhit()) // teste ob Taste gedrückt
      {
        ch=getch();
    
        if ((ch==224) || (ch==0)) // teste, ob Sonderzeichen (Pfeiltasten, ESC, etc.)
        {
          ch=getch(); // Tastencode holen
    
          switch(ch)
          {
            case 75:
    	        // links
    		break;
    
    	case 77:
    		// rechts
    		break;
    
    	case 72:
    	        // oben
    		break;
    
    	 case 80:
    	        // unten
    		break;
    
    	default:
          }
        }
        else
        {
          // normale Taste wie A, B, C, etc.
        }
      }
      else
      {
        // Wenn keine Taste gedrückt wurde
      }
    }
    
    // weiterer Code
    

    ich hoffe die Richtungsangaben stimmen. Ist schon lange her, könnte sein, dass ich die Richtungen vertauscht habe, aber das bekomst du sicher raus und dann auch sicher selber korrigiert.

    Tschau Gartenzwerg



  • Bitte sucht nach einer anderen Möglichkeit wie system(), um den Bildschirm zu löschen oder eine beliebige Eingabe vom Benutzer machen zu lassen. Das ist ja grausam 😮

    @Tobi
    Wenn du anstatt cin>> getch() verwendest, dann funktioniert es auch. Außerdem kannst du dir das erste cin>> sparen oder hat es irgendeinen Zweck, dass du am Anfang gleich zweimal einliest?? Außerdem sollte man Variablen, die man nur lokal verwendet auch lokal deklarieren.

    Zum Bildschirmlöschen verweise ich dich mal in die Konsolen-FAQ. Da gibts einen Beitrag darüber in dem mehrere Möglichkeiten stehen, wie du das realisieren kannst (ohne system()!).



  • Ich verweise auch für getch() in die Konsolen-FAQ und damit muss ich hier mal schließen, da hier zu grauenhafte Vorschläge kamen.

    Simples Menü:

    while(running)
    {
        zeichne_menu();
    
        switch(getch())
        {
            ...  //(bei Beenden running auf false setzen)
        }
    }
    

    MfG SideWinder


Anmelden zum Antworten