C - Programm - Tastaturpuffer einlesen bzw. abfragen ob Taste gedrückt

Gast #2453520
Lesenswert?

Hallo,


habe hier ein kleines Problem bei meinem C Programm. Ich hoffe ihr könnt 
mir weiterhelfen.
Folgendes:

Das Programm soll im Hintergrund laufen und immer wieder die Systemzeit 
aktualisieren ( also die While Schleife durchlaufen ) bis der Benutzer 
im Spiel eine bestimmte Taste drückt. In dem Fall "DEL".
Dann soll das Programm automatisch die Schleife fertig arbeiten und dann 
zur Eingabe mittels Scanf zurückkehren.

Allerdings scheint das "while (getch() != '127')" nicht zu 
funktionieren....

Außerdem läuft er die While Schleife immer erst durch, sobald ich 
irgendeine Taste drück (Wäre besser wenn er sie kontiniuerlich 
durchlaufen würde, damit die Systemzeit schön aktualisiert wird.).


Wundert euch bitte nicht über die Namen, sollte eben ein kleines 
Hilfsprogramm zu nem Spiel werden.



mfg




<code>

#include <windows.h>
#include <stdio.h>
#include <time.h>



void main (int argc, char *argv[])
{
     int a,rl,rr,bl,br,dr,ba,eingabe;
     time_t startzeit;

     printf("LoL Jungle Timer V1.0\n\n");

     printf("Taste druecken - Sobald Spiel gestartet ist!!!!\n\n");
     system("Pause");

     startzeit=time(NULL);
     a=startzeit;

     rl=startzeit+115;
     rr=startzeit+115;
     bl=startzeit+115;
     br=startzeit+115;
     dr=startzeit+150;
     ba=startzeit+900;

     goto label1;






     while(1)
     {


     printf("Waehlen sie die Zahl:\n1. Roter Buff LINKS\n2. Roter Buff 
RECHTS\n3. Blauer Buff LINKS\n4. Blauer Buff RECHTS\n5. Drache\n6. 
Baron\n\n");


     printf("Eingabe: ");


     scanf("%d",&eingabe);


     while (getch() != '127')
     {


     if (eingabe == 1)
     {
          startzeit=time(NULL);
          rl=startzeit+300;
     }
     else if(eingabe == 2)
     {
          startzeit=time(NULL);
          rr=startzeit+300;

     }
     else if(eingabe == 3)
     {
          startzeit=time(NULL);
          bl=startzeit+300;

     }
     else if(eingabe == 4)
     {
          startzeit=time(NULL);
          br=startzeit+300;

     }
     else if(eingabe == 5)
     {
          startzeit=time(NULL);
          dr=startzeit+360;

     }
     else if(eingabe == 6)
     {
          startzeit=time(NULL);
          ba=startzeit+420;

     }
     else
     {
         printf("Falsche Eingabe!");
     }




     label1:



     startzeit=time(NULL);
     a=startzeit;

     system("CLS");

     printf("Aktuelle Systemzeit:                    %s\n",ctime(&a));
     printf("Spawnzeitpunkt Roter Buff Links:        %s\n",ctime(&rl));
     printf("Spawnzeitpunkt Roter Buff Rechts:       %s\n",ctime(&rr));
     printf("Spawnzeitpunkt Blauer Buff Links:       %s\n",ctime(&bl));
     printf("Spawnzeitpunkt Blauer Buff Rechts:      %s\n",ctime(&br));
     printf("Spawnzeitpunkt Drache:                  %s\n",ctime(&dr));
     printf("Spawnzeitpunkt Baron:                   %s\n",ctime(&ba));



     }


     }


}



</code>
Gast #2453547
Lesenswert?

Autor schrieb:
> while (del=GetAsyncKeyState(VK_DEL) != 1);
>
> Er durchläuft sie solange bis del = 1 ist richtig?
Ich meine da fehlen Klammern (die Operatorenreihenfolge konnte ich mir 
noch nie merken).

>
> Dann bringt er mir die Meldung VK_DEL sei nicht deklariert.
Och Mensch nochmal, guck doch mal in die winuser.h, dann wüsstest du das 
es
VK_DELETE heißen muss.
1
#define VK_DELETE  46

> Ich deklariere es, dann hängt er sich nach der Eingabe beim Eintritt in
> die While Schleife auf.
Mit welchem Wert denn? Ne, so wird das natürlich nichts. Ohne dir zu 
nahe treten zu wollen, besonders viel Programmiererfahrung hast du nicht 
oder?

> VK_DELETE funktioniert besser, dann muss man die Variable schonmal nicht
> deklarieren.
UARGHS! Das ist keine Variable!!!
Gast #2453553
Lesenswert?

So, bitte sehr...
1
#include <stdlib.h>
2
#include <stdio.h>
3
#include <stdint.h>
4
#include <windows.h>
5

6
int main (int argc __attribute((__unused__)), char **argv __attribute((__unused__)))
7
{
8
  uint16_t del_pressed;
9
  printf("Beenden mit DELETE!\n");
10
  while(!GetAsyncKeyState(VK_DELETE))
11
  {
12
    del_pressed=GetAsyncKeyState(VK_ESCAPE);
13
    if(del_pressed)
14
      printf("Escape gedrueckt!\n");
15
    else
16
      printf("Escape nicht gedrueckt!\n");
17
    Sleep(50);
18
  }
19
  return 0;
20
}
#2453575
Lesenswert?

rhdfztk schrieb:
> int main (int argc __attribute((_unused_)), char **argv 
__attribute((_unused_)))

Was soll der Unsinn denn? Wenn du argc und argv nicht benutzt, dann 
definiere sie nicht. Das ist sinnvoller, als sie zu definieren und dann 
mit compilerspezifischen Erweiterungen den Code unleserlicher zu machen, 
nur damit der Compiler weiß, daß du die mit Absicht gar nicht benutzt.
Gast #2453817
Lesenswert?

Rolf Magnus schrieb:
> Ja.Ein konformer Compiler muß auf jeden Fall die argc/argv-Variante und
> die ganz ohne Parameter akzeptieren.

Gut zu wissen, danke für die Info. Sieht gleich viel eleganter aus. :-)

(Ich dachte argc/argv seien Pflicht und wollte die Warnungen "unused 
variable" wegbekommen.)

Autor schrieb:
> Ist es möglich das Programm Transparent in dem Spiel anzeigen zu lassen?
>
> D.h. im Spiel sehe ich Rechts oben z.B dann die verbleibende Zeit bis
> das Ereignis passiert.

Gehen tut das vermutlich, aber nicht ohne größeres Gebastel mit der 
Windows-API. Ich kenne mich da nicht aus und imho ist das nichts für 
Anfänger...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren