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 60bool 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 einzurichtenint 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 malcase 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.