menue steuerung,im fenster



  • hallo,
    hab vor ein programm mit nem menue über die eingabeaufforderung zu steuern.
    gibt es da in c++, ein grundgerüsst?

    oder wie funktioniert das das einzelne punkte im quellcode mit einem befehl abgearbeitet werden?

    danke im vorraus

    :xmas1: ➡ :xmas2:



  • Ich würde dir die conio.h empfehlen, getch() zu benutzen, eine Variable die sich die Position des Cursors abspeichert, damit man prüfen kann an welcher Stelle man Enter gedrückt hat und man das nächste Bild schreiben kann, wenn man nach unten oder oben gedrückt hat. Außerdem wirst du eine Clearscreen Funktion brauchen.



  • Du kannst aber auch ein ganz einfaches Menü mit switch und case machen.



  • Da er sich nicht konkret ausgedrückt hat, kann man das nicht ganz genau sagen was er will. Ob er jetzt was einfaches will :

    Addition (1)
    Subtratkion (2)
    ...
    Eingabe = (hier die nummer eingeben)

    oder

    Menue1 <-
    Menue2
    Menue3

    und man den Pfeil hoch und runter drücken kann.



  • 😕

    :xmas1: :xmas2:



  • Hallo,
    Wie Freaky schon sagte benutze am besten die conio.h, dort findest du die Funktionen getch() und kbhit(). Zusaetlich vllt. noch die windows.h fuer Sleep (oder war die auch schon in conio.h drin?) um ein Sleep in deine Loop zupacken, was dann die CPU-Auslastung deutlich mindert.

    - kbhit( ) wird benutzt um zu testen, ob eine Taste gedrueckt wurde
    - getch( ) wird benutzt um den Tasten Code zu liefern

    Wenn du das ganze nun in eine Loop packst hast du schon mal dein Grundgeruest:

    // Warte auf User input
    bool inMenu = true;
    char cKey   = 0;
    
    do {
    
        cKey = 0; // clear last input
    
        if( kbhit( ) ) { // key was pressed?
    
            cKey = getch( ); // determine key
    
            moveMenuCursor( cKey ); // function which change marked menu option
        }
    
        Sleep( 10 ); // decrease cpu usage
    } while( inMenu || (cKey != 27 )) // 27 ist Escape, kann auch 13 gewesen sein ;)
    

    So da hast dein Grundgeruest, wie man moveMenuCursor( const char cKey ); implementiert ueberlasse ich dir.

    Tipp: Wie schon gesagt wurde, wirst du um folgende Definitionen nicht drumrum kommen:

    - eine Variable die deine vertikale Cursorposition haellt gegebenenfalls auch die horizontale (global/oder statisch),
    - ein switch-case-Block in dem du den Inputparameter verarbeitest und die Cursorposition veraeenderst,
    - und nicht vergessen die letzte Position vom Cursor zu loeschen 😉

    Gruß Tobi



  • hallo,
    die einfache methode ist genau was ich suche.
    man solle in der eingabeaufforderung punkte haben mit dennen mann zb ein gegenstand steuern kann. zb nen auto oder so was.
    was besitzt so ein auto.
    ne hupe nen lenkrad.
    die funktionen sollen über eine methode lenken zb. 1 links herum 2 rechts herum,
    erfüllt werden.
    c++ bietet einiges an funktionen.
    aber da ich mit einlesungen der tasten über die tastatur noch nicht viel am hut hatte, weis ich nicht wie ichs umsetzen kann.

    ich wer allen sehr dankbar für jede hilfe.



  • hier ist eine einfache Funktion mit switch case......ich das hilft dir weiter..... 😃

    [cpp]#include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    float plus(float a, float b);
    float minus(float a, float b);
    float mal(float a, float b);
    float geteilt(float a, float b);
    float reset();
    int main(void)
    {
    char ay;
    do
    {
    float a,b,c;
    printf("geben sie bitte eine Zahl ein\n");
    scanf("%f",&a); fflush(stdin);
    printf("geben sie bitte noch eine Zahl ein\n");
    scanf("%f",&b); fflush(stdin);
    printf("Moechten sie \nAddieren '+'\nSubtrahieren '-'\nMultiplizieren '*'\
    nDividieren '/'\nReset 'c'\nBeenden 'q'\n");
    scanf("%c",&ay); fflush(stdin);
    switch(ay)
    {
    case'+': c=plus(a,b); printf("\n\nDas Ergebnis ist %f\n",c);
    break;
    case'-': c=minus(a,b); printf("\n\nDas Ergebnis ist %f\n",c);
    break;
    case'*': c=mal(a,b); printf("\n\nDas Ergebnis ist %f\n",c);
    break;
    case'/': c=geteilt(a,b); printf("\n\nDas Ergebnis ist %f\n",c); break;
    case'c': c=reset(); printf("\n\nDas Ergebnis ist
    %f\n",c); break;
    case'q': printf("Cyaaaa");break;
    default: printf("DUM?");
    }
    fflush(stdin);
    }
    while(ay!='q');
    ay=0;
    printf("Press Enter to exit");
    system("PAUSE");
    }
    float plus(float a, float b)
    {
    float x;
    x=a+b;
    return x;
    }
    float minus(float a, float b)
    {
    float x;
    x=a-b;
    return x;
    }
    float mal(float a, float b)
    {
    float x;
    x=a*b;
    return x;
    }
    float geteilt(float a, float b)
    {
    float x;
    x=a/b;
    return x;
    }
    float reset()
    {
    float x;
    system("CLS");
    x=0.0;
    return x;
    }
    [/cpp]
    


  • 1111 schrieb:

    hier ist eine einfache Funktion mit switch case......ich das hilft dir weiter..... 😃

    • Hoffe ich das du nicht wirklich so misserabel einrückst (nämlich garnicht), wie hier zu sehen. Unleserlich.
    • Sind wir hier im C++ Forum, das C-Unterforum ist nebenan. C++ ist an diesem Code jedenfalls nichts (Alleine schon die includes [stdio.h, stdlib.h] sind nicht C++ konform).
    • Sollte man Variablen erst deklarieren wenn man sie verwendet.
    • code und cpp Tags muss man nicht kombinieren, sondern entweder das eine oder das andere Tag für Code verwenden (Für C/C++ natürlich lieber die cpp-Tags)
    • Ich hoffe ihr wisst das SYSTEM und conio System-/Compilerabhängig sind.
    • Unnötig langer Code, ohne dadurch die Lesbarkeit zu erhöhen:
    // Unnötig lang:
    float plus(float a, float b)
    {
      float x;
      x=a+b;
      return x;
    }
    
    // Besser (Und mindestens ebenso lesbar):
    float plus(float a, float b)
    {
      return a+b;
    }
    

    cu André


Anmelden zum Antworten