Tastendruck einlesen

AHoi ich habe mal ne Frage ich möchte, eine Schleife programieren die überprüft ob eine Taste gedrückt wurde. Mit welchem Befehl kann ich dies tun. Und welche Header Datei muss ich einbinden ?

AHoi ich habe mal ne Frage ich möchte, eine Schleife
programieren die überprüft ob eine Taste gedrückt wurde. Mit
welchem Befehl kann ich dies tun. Und welche Header Datei muss
ich einbinden ?

  • Programmiersprache?
  • Betriebssystem?
  • Compiler?
  • Ein/Ausgabesystem (X, W32, stdio)?

??

CMБ

hallo,
unter windows kannst du mit C funktion
kbhit() prüfen ob eine tastadruck betätigt ist und mit getchar erfährst du welche taste gedrückt ist.
ich hoffe das hilft.

youssef

Ahoi, danke erstmal für die Antwort, also hat alles funktioniert nur, dass er egal welche Taste ich gedrückt habe den Wert Zehn rauskriegt und, dass es nicht mit den Cursor Testen funktioniert. Ist für Windows 98, Programmiersprache dürfte ja klar sein. Compiler VC++ 6.0 Prof.

Valentin

hallo valentin,
cook dir dieses programm an und führ ihn aus, es ist vielleicht was du willst.

/* 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
#include

void main( void )
{
char c ;
/* Display message until key is pressed. */

while(1)
{
if( !_kbhit() );
{
// _cputs( "Hit me!! " );

/* Use _getch to throw key away. */

c = _getch();
printf( „\nKey struck was ‚%c‘\n“,c );
printf("\nKey struck in ascii :%d\n",c);
_getch();
}
}
}

gruss
youssef

Hallo youssef,

Dein Programm ist ganz gut, allerdings
habe ich einige Fragen dazu.

Ich habe zunächst die Zeilen etwas
„weiträumiger“ angeordnet und die
Unterstriche „_“ weggelassen:

#include 
#include 

 void main( void )
{
 char c ; 

 while(1) { /\* Display message until key is pressed. \*/

 if( !kbhit() ) 
 ; 

 {
 c = getch();
 printf("\nKey struck was '%c'\n",c );
 printf("\nKey struck in ascii :%d\n",c);
 getch();
 }

 }

}

Nun meine Frage. Warum schreibt man:

if( !kbhit() ) ;

da dieser Ausdruck das Selbe macht
als würde man nur schreiben:

kbhit();

Weiterhin; warum schreibt man die beiden „getch()“ in einen
extra Block {}?

Würde das Gewünschte nicht auch passieren, wenn
man schreibt:

#include 
#include 

 void main( void )
{
 char c=0; 

 do if( kbhit() ) {
 c = getch();
 printf("\nKey struck was '%c' (%d)\n", c, (unsigned char)c);
 } while ( c != 27 ); /\* Escape = 27 \*/

}

Grüße

CMБ

Hallo Semjon,

deine fragen sind berechtigt.
ich habe den beispiel code von kbhit() aus der msdn library und habe ihn erweitert um das gewünschte zu erziehen.ich habe mich nicht bemüht das code gut zu verstehen
ich habe es auf die schnelle gemacht weil mir nur die ausgabe interessiert hat, aber von der style her ist dein programm verständlicher und einfacher.

youssef

Hallo CMБ,

Dein Programm ist ganz gut, allerdings
habe ich einige Fragen dazu.

Ich habe zunächst die Zeilen etwas
„weiträumiger“ angeordnet und die
Unterstriche „_“ weggelassen:

Die Unterstriche „_“ sollte man eigentlich nicht weglassen !!
Funktionen welche NICHT ANSI-Konform sind sollten mit einem „_“ beginnen. Aus Gründen der Kompatibilität mit alten Programmen sind Funktionen wie kbhit() aoft auch nochmals ohne „_“ definiert.

#include 


> #include   
>   
> void main( void )  
> {  
> char c ;  
>   
> while(1) { /\* Display message until key is pressed. \*/  
>   
> if( !kbhit() )  
> ;  
>   
> {  
> c = getch();  
> printf("\nKey struck was '%c'\n",c );  
> printf("\nKey struck in ascii :%d\n",c);  
> getch();  
> }  
>   
> }  
>   
> }

Nun meine Frage. Warum schreibt man:

if( !kbhit() )
;

da dieser Ausdruck das Selbe macht
als würde man nur schreiben:

kbhit();

Weiterhin;
warum schreibt man die beiden „getch()“ in einen
extra Block {}?

Das „;“ ist mit sicherheit ein Tippfehler !!!

MfG Peter(TOO)