Tastendruck abfangen unter Eclipse



  • Hallo,

    folgendes Programm soll mittels kbhit() solange warten, bis der user eine Taste gedrückt hat.

    #include <stdio.h>
    #include <conio.h>
    
    int main ()
    {
    printf("Bitte eine Taste druecken: \n");
        while(1){
            if(kbhit()){
                printf("Es wurde ein Zeichen gedrueckt.\n");
                break;
            }
        }
        return 0;
    }
    

    Betriebssystem: Windows XP
    IDE: Eclipse for C/C++ 3.4.0
    Compiler: MinGW

    In VisualStudio 2005 funktioniert es einwandfrei, aber nicht unter Eclipse.
    Ich bekomme keine Fehlermeldung, also versuche ich kurz zu beschreiben was passiert.

    Die erste print-Anweisung wird ausgeführt und ich bekomme den Text auf die Konole geschrieben. Also Tippe ich eine Taste. Und nun passiert das, was eigentlich nicht passieren soll. Ich bleibe in der Schleife hängen und jedes Zeichen, was ich eintippe, wird auf die Konsole geschrieben... 😞

    Die Biblipthek conio.h ist enthalten und ebenso die Funktion kbhit(). Ich weiß nicht weiter. Ich hoffe, ihr habt eine Idee?
    Ich bin noch C-Neuling.

    *edit*
    Ich habe jetzt versucht, die .exe direkt über die cmd auszuführen... und ich stelle fest, das geht. Also liegt das Problem in der Konsole von Eclipse???



  • so gehts auch

    #include <stdio.h> 
    #include <conio.h> 
    
    int main () 
    { 
    printf("Bitte eine Taste druecken: \n"); 
    getch();
    printf("Es wurde ein Zeichen gedrueckt.\n"); 
    return 0; 
    }
    


  • Ah... ist viel kürzer und erfüllt denselben Zweck... Dankesehr. 🙂
    Na ja nur in der EclipseKonsole geht es nicht. Wobei mir da noch nicht mal die erste print-Anweisung ausgegeben wird, ohne dass ich den Puffer zuvor leere mit

    setbuf(stdout, NULL);
    

    😕



  • probier mal ein

    system("PAUSE");
    

    vor dem return 0; oder getchar() statt getch()



  • Hallo,

    ich habe leider das gleiche Problem unter Eclispe:
    Version: 3.4.1
    MinGW-5.1.4.exe

    Einlesen mit getchar () funktioniert nicht wie gewünscht.
    e.g.:

    cout << "Bitte eingeben: ";
      c= getchar ();
      cout << "DEB2";
    

    Ich muss nun zuerst ein Zeichen eingeben und dann kommt erst der Konsolen output mit "Bitte eingeben: "
    Wer kann mir da weiterhelfen? 😃
    lg
    Franz



  • Besser entweder nur die C-IO-Funktionen verwenden, oder nur die IO-Streams von C++. Siehe aber auch: man: fflush.



  • Hi,
    Hab da auch mal eine Frage zum Codesnippet mit `getch()`,
    wie müsste man das erweitern um auszugeben, welches Zeichen der
    Nutzer eingetippt hat?
    Hab da noch nicht so den Durchblick, weil ich mich damit
    noch nicht so lang beschäftige 😃

    MfG Jonas 😉



  • talas schrieb:

    Hab da auch mal eine Frage zum Codesnippet mit `getch()`,
    wie müsste man das erweitern um auszugeben, welches Zeichen der
    Nutzer eingetippt hat?

    for (;;)
    {
      int c = getch();
      printf ("%d => %c\n", c, c);
    }
    

    🙂



  • Dank dir schön ~fricky.
    Jetzt muss ich es nur noch verstehen 😃
    Wenn es dir nicht als zu viel Aufwand
    erscheint würde ich dich um eine kleine
    Erklärung des Snippets bitten 😉

    MfG Jonas 😉



  • // endlosschleife, alles zwischen { und } wird immer wiederholt
    for (;;)
    {
      // der rückgabewert von 'getch()' wird in 'c' gespeichert
      // getch() wartet, bis eine taste gedrueckt wurde
      int c = getch();
      // wir geben 'c' zwei mal aus. einmal als zahl und dann nochmal als zeichen
      printf ("%d => %c\n", c, c);
    }
    

    🙂



  • Vielen Dank ~fricky 😉

    MfG Jonas 😉



  • Danke auch für die Antwort.


Anmelden zum Antworten