Tastenabfrage



  • Hallo zusammen

    ich suche anch eienr funktion (oder nach eienr möglichkeit eine funktion selber zu schreiben) die folgendes macht:

    - hält das programm an
    - liest einen tastenanschlag ein ohne ihn auszugeben
    - braucht keine bestätigung per enter oder leertaste

    PS: wer die sprache Elan vom bestriebssystem L3 kennt -> da heisst der befehl inchar

    mir schwebt sowas vor wie:

    char t;
    t = _new_func();
    /* Rest des quellcodes */
    // und man kann solche sachen machen
    if ( t == 's' ) 
        std::cout<<"blablabla"<<std::endl;
    

    also quasi das was man in der winapi in der windows proc macht mit dem messagequeueing...

    mfg Philipp



  • such mal nach

    kbhit()
    

    und/oder

    getch()
    


  • jo klappt mit

    getch()
    

    und 'conio.h'

    thx



  • Dabei musst du allerdings vorsichtig sein, da die Funktion soweit ich weiß nicht dem Standard angehört.

    Also könnte es sein, dass sich dein Code nicht mit einem anderen Compiler kompilieren lässt.



  • Unter Linux(leider nicht unter win) geht das so:

    #include <termios.h>
    #include <iostream>
    
    int
    set_canon(int flag)
    {
            struct termios t;
    
            tcgetattr(fileno(stdin), &t);
            if( flag)
                    t.c_lflag |= ICANON;
            else
                    t.c_lflag &= ~ICANON;
            tcsetattr( fileno(stdin), TCSANOW, &t); 
    
            return 1;
    }
    
    int main()
    {
            int ch;
    
            set_canon( 0);
            std::cout << "mit t fortfahren ...\n";
            if 't' == (ch = getchar())) 
    		{
    			std::cout << " : blablabla" << std::endl;
            }
    
            set_canon(1);
    }
    

    leider gibt diese Lösung ein echo von 'ch' zurück (siehe Dave__R)



  • @double *T

    getchar() gibt aber ein echo auf der konsole soviel ich weiss
    getch() nicht.



  • Dave__R schrieb:

    @double *T

    getchar() gibt aber ein echo auf der konsole soviel ich weiss
    getch() nicht.

    Nein, aber es wartet auf die Enter Eingabe.



  • Dave__R schrieb:

    @double *T

    getchar() gibt aber ein echo auf der konsole soviel ich weiss
    getch() nicht.

    drakon schrieb:

    Nein, aber es wartet auf die Enter Eingabe.

    ja, stimmt. Als ich dies schrieb lehnte ich mich auf den nun editierten/verbesserten code oben, der aber leider nicht zum standard gehört und wie Dave__R schrieb ein echo auf der Konsole zurück gibt 🤡 in linux gibt es aber meineswissens kein getch().


Anmelden zum Antworten