Auf Taste warten...
-
Hi!
Ich will mein Program dazu bringen, dass er auf einen Tastendruck eine bestimmte Zeit wartet. Wenn keine taste gedruckt wird, soll er weitermachen, wenn eine Taste gedruckt wird, muss ich diese Taste ablesen.
Hier mein Code
while((c!='x')&&(!go)) { ap=0; start=clock(); do {end=clock(); c=kbhit();//kbhit gibt mir irgendein integerwert zuruck.... if (c!=0) ap=1;} while ((end-start<5)&&(!ap)); if ((v=='a')&&(c=='d')) v='a'; else if ((v=='w')&&(c=='s')) v='w'; else if ((v=='d')&&(c=='a')) v='d'; else if ((v=='s')&&(c=='w')) v='s'; else if (c!=0) v=c; switch (v) { case 'a':{ sarpebl(l); stn(l); sarpe(l); };break; case 's':{ sarpebl(l); jos(l); sarpe(l); };break; case 'd':{ sarpebl(l); dre(l); sarpe(l); };break; case 'w':{ sarpebl(l); sus(l); sarpe(l); };break; } }
wie kann man kbhit() umgejen...?
-
Zu kbhit steht was in der Konsolen FAQ
Auserdem kbhit gibt es nicht im Standard C++.
-
das war nicht seine frage, lies mal richtig, er will kbhit umgehen.
-
Ich muss besser lesen bevor ich poste
Ich muss besser lesen bevor ich poste
...Hoffentlich habe ich es jetzt verstanden
-
Tja...nicht umbedingt umgehen... (aber ich glaube dass muss man)
ich will eine funktion, ahnlich wie kbhit(), aber die mir auch den char angibt, falls einer gedruckt wird...
ich glaube dass kann man kbhit nicht erreichen...
oder... nicht umbedingt eine function, es konnte auch ein code sein....
-
Verwende ruhig kbhit(). Das ist o.k. und effizient. Schau Dir auch mal getch() und getche() an.
-
@Erhard Henkes
wenn man kbhit verwendet, und man druckt eine taste, dann gibt dir kbhit nicht die taste zuruck die du gedruckt hast, sondern was anderes. weiss nicht was, meiner meinung nach ist es eine zufallszahl zw 1-255
-
ist klar, dennoch:
MSDN:
The _kbhit function checks the console for a recent keystroke. If the function returns a nonzero value, a keystroke is waiting in the buffer. The program can then call _getch or _getche to get the keystroke.Example
/* KBHIT.C: This program loops until the user * presses a key. If _kbhit returns nonzero, a * keystroke is waiting in the buffer. The program * can call _getch or _getche to get the keystroke. */ #include <conio.h> #include <stdio.h> void main( void ) { /* Display message until key is pressed. */ while( !_kbhit() ) _cputs( "Hit me!! " ); /* Use _getch to throw key away. */ printf( "\nKey struck was '%c'\n", _getch() ); _getch(); }
Output:
Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!!
Key struck was 'q'oder hier:
#include <conio.h> #include <windows.h> #include <ctime> #include <cstdlib> #include <cstdio> using namespace std; int main ( void ) { int sekunden = 0; int minuten = 0; int stunden = 0; while (true) { printf("%02i:%02i:%02i\n", stunden, minuten, sekunden); Sleep(1000); if ( kbhit() && ( getch()==13 ) ) break; // kbhit und getch !!!!! system("cls"); sekunden++; if (sekunden==60) { minuten++; sekunden=0; } if (minuten ==60) { stunden++; minuten =0; } } return 0;}
-
Die conio.h ist für gewisse Aufgaben ideal, da bleibt der C++-Standard im Regen stehen, weil er sich für das Keyboard eigentlich nicht interessiert. C++ ist weitgehend autistisch, will eigentlich mit dem User nichts zu schaffen haben.
Hier die weiteren Funktionen:
Console and Port I/O Routines
_cgets Read string from console _cprintf Write formatted data to console _cputs Write string to console _cscanf Read formatted data from console _getch Read character from console _getche Read character from console and echo it _inp Read one byte from specified I/O port _inpd Read double word from specified I/O port _inpw Read 2-byte word from specified I/O port _kbhit Check for keystroke at console; use before attempting to read from console _outp Write one byte to specified I/O port _outpd Write double word to specified I/O port _outpw Write word to specified I/O port _putch Write character to console _ungetch "Unget" last character read from console so it becomes next character read
-
danke sehr....
hat hingehauen.....