keine wartende Tastatureingabe
-
moin moin!!
Hab vor einigen Wochen schonmal diese Frage gestellt, kam aber leider nix bei rum, darum hoffe ich dieses mal wissende Leute hier anzutreffen
also hab folgendes Problem:
möchte Zeitpunkt unabhängig, also egal in welcher Zeile sich mein Programm befindet, eine Tasatureingabe machen können! Diese Tasatureingabe soll dann eine bestimmte Funktion auslösen! getch(), getchar() und das ganze Zeug funktioniert leider nicht, da es ja auf den Tasatureingabem wartet!!
Wäre euch sehr dankbar, wenn ihr mir weiterhelfen könntetMFG
-
Moin, Moin
Wenn du im Polling Betrieb bist, hilft dieses:
while(1) { if(kbhit() == 1) // keyboard was hit! { cLetter = getch(); } switch(cLetter) { case 'A': machwas(); break; // and so on.... ;) } }
Zeh Mau
-
Die switch-Anweisung sollte aber in den Block der if-Anweisung rein, sonst würde der Befehl danach dauernd ausgeführt werden, obwohl die Taste nicht mehr gedrückt ist.
-
Zeh Mau schrieb:
Moin, Moin
Wenn du im Polling Betrieb bist, hilft dieses:
while(1) { if(kbhit() == 1) // keyboard was hit! { cLetter = getch(); switch(cLetter) { case 'A': machwas(); break; // and so on.... ;) } } }
Zeh Mau
-
mh aber ist das nicht trotzdem Zeitpunktabhänging???
solange ich ja jetzt nicht das 'A' betätige, läuft mein Programm doch nicht weiter oder???
-
zarilo schrieb:
solange ich ja jetzt nicht das 'A' betätige, läuft mein Programm doch nicht weiter oder???
Jein! Es läuft zwar schon weiter, aber das Programm muß auch
die Funktion kbhit() abfragen. Eine richtige nicht-Polling-
Lösung müßte schon mit einem separaten Thread realisiert werden,
der ständig die Tastatur abfragt und, bei Druck einer Taste,
sofort reagiert und eine entsprechende Funktion aufruft.Da ich mich aber mit C-Threads nicht auskenne, kann ich hierzu nichts sagen...
-
Javaner schrieb:
Da ich mich aber mit C-Threads nicht auskenne, kann ich hierzu nichts sagen...
hast du schon und das stimmt auch weitgehend.
-
hi
und wieso kann ich mit der mit dem cursor nicht ganz rauf?hier download link zur main.exe:
edit by Tim: eine executable bringt hier nichts. Und ich will hier auch nicht exes verlinkt haben, da könnte alles dahinter stecken.bitte um schnelle hilfe
lg
-
langsammm schrieb:
hier download link zur main.exe:
'ne exe hilft nix. du musst den quellcode zeigen...
-
char input; const int xch = 10; const int ych = 20; int x = xch; int y = ych; gotoxy(x, y); while(true) { input = _getch(); if(input == 119 || input == 87) // W { gotoxy(x,y - 1); } else if(input == 65 || input == 97) // A { gotoxy(--x, y); } else if(input == 115 || input == 83) // S { gotoxy(x, ++y); } else if(input == 68 || input == 100) // D { gotoxy(++x, y); } else { std::cout << "Taste nicht gefunden."; gotoxy(++x, ++y); } }
-
??
-
was verstehst du denn an der obigen lösung nicht?
-
langsam schrieb:
char input; const int xch = 10; const int ych = 20; int x = xch; int y = ych; gotoxy(x, y); while(true) { input = _getch(); if(input == 119 || input == 87) // W { gotoxy(x,y - 1); } else if(input == 65 || input == 97) // A { gotoxy(--x, y); } else if(input == 115 || input == 83) // S { gotoxy(x, ++y); } else if(input == 68 || input == 100) // D { gotoxy(++x, y); } else { std::cout << "Taste nicht gefunden."; gotoxy(++x, ++y); } }
und wieso kann ich mit der mit dem cursor nicht ganz rauf?
????
-
langsam schrieb:
if(input == 119 || input == 87) // W { gotoxy(x,y - 1); } else if(input == 65 || input == 97) // A { gotoxy(--x, y); } ...
Vergleich doch mal den prinzipiellen Aufbau der beiden Abfragen, vielleicht erkennst du ja den Unterschied.
(im ersten Fall schiebst du den Cursor zwar eine Zeile gegenüber deiner aktuellen Position nach oben, korrigierst die Position aber nicht)
PS: Bitte verwende char-Literale anstelle der Magic Numbers
PPS: Und wo wir gerade dabei sind, solltest du dich mal mit switch() auseinandersetzen.