Tastatur einlesen , möglichst compiler unabhängig



  • Hallo,

    nachstehendes Programm läuft unter Microsoft Visual C ++ wunderbar.
    Doch leider ist das Hauptprogramm nun mal mit dem WATCOM-Compiler
    geschrieben worden.
    Und dort macht es nicht mehr das was soll.

    ****************************

    #include <iostream>
    #include <string>
    #include <conio.h>

    #define ESC 27
    #define F1 59
    #define F2 60

    bool ende;

    void Test1()
    {
    cout << "Das ist F1 " << endl;
    }

    void Test2()
    {
    cout << "Das ist F2 " << endl;
    }

    //Dieses Programm läuft unter Microsoft Visual C++ wunderbar
    //unter WATCOM macht es nicht das was soll
    //keine Lust noch ein drittes C++ System einzurichten

    int main()

    {
    ende = false;
    cout << " TESTPROGRAMM " << endl;

    cout << "vor tastaurAbfrage " << endl;
    while(!ende)
    {

    if (kbhit() !=0)
    {
    switch(getch())
    {
    case F1 : Test1();
    break;
    //1. wird das erste mal F1 gedrückt passiert nichts
    // erst beim zweiten mal

    case F2 : Test2();
    break;

    case ESC: ende = true;
    //kommt sofort, allerdings wenn davor F1/F2 gedrückt wurde
    //wird die funktion mit abgearbeitet, aber auch nicht immer !?

    //wenn eine taste gedrückt wurde :
    //muß danach der wert der von getch eingelesen wurde, gelöscht werden
    //ABER : der alte wert bleibt liegen, obwohl bereits eine neue
    // Funktion gewählt wurde

    //

    }
    }
    }

    cout << "Drücke beliebige Taste um zu verlassen" << endl;
    int uu=getch();

    return 0;
    }

    ciao,

    FanFan



  • Du solltest deinen Tastatur-Puffer leeren, insbesodere, wenn du das Programm aus der Konsole startest, weil es sein kann, dass das letzte Enter, das du gedrückt hast noch drin ist.

    flush(stdin);
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • imhotep schrieb:

    Du solltest deinen Tastatur-Puffer leeren, insbesodere, wenn du das Programm aus der Konsole startest, weil es sein kann, dass das letzte Enter, das du gedrückt hast noch drin ist.

    flush(stdin);
    

    ⚠ Siehe ANSI-C-FAQ!!! ⚠

    Außerdem: Themaverfehlung

    @FanFan
    So wie du es programmiert hast und es wohl ablaufen soll, musst du Compiler- bzw. Betriebssystemabhängig programmieren.

    getch() könntest du z. B. durch getchar() oder ähnliches ersetzen, aber kbhit() ist was spezielles, was im Standard (ANSI) nicht vorkommt.

    BTW: F1 löst aus, dass zwei Zeichen im Tastaturpuffer stehen. Das erste Zeichen ist normalerweise eine 0:

    ...
    switch(getch())
    {
       case 0: //Sondertasten
          switch(getch())
          {
             case F1:
                funktion1();
                break;
             case F2:
                funktion2();
                break;
          }
          break;
       case ESC:
          ende();
    }
    

    Näheres dazu findest du auch in der Konsolen-FAQ.


Anmelden zum Antworten