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++.



  • @CNewbie

    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.....


Anmelden zum Antworten