ESC Abfrage ohne Programm anzuhalten unter Windows
-
Hallo Leute,
ich brauch mal wieder Hilfe, ... und zwar hab ich folgendes Problem:
> zZeit << sei eine beliebige Zeit, sagen wir das Script soll eine gewisse warten bis es weiterläuft, jedoch soll es dabei abfragen, ob Escape gedrückt wurde. Falls ESC nicht gedrückt wird soll nach der while weiterlaufen.
while((diff=difftime(stop=time(NULL),start)) != zZeit)
{
// wenn ESC in zZeit gedrückt, folgt Funktionsaufruf
}//...weiterer Script
Ich hab einige Sachen mit kbhit() ausprobiert, aber mit kbhit() kann ich kein ESC abfragen, denn egal was ich drück gibt es mir immer 1 aus!
Kann mir jemand ein Beispiel zeigen, wie ich das Probkem beheben kann?
Vielen Dank
Gruß Lulu
-
kbhit() liefert nur ob ein taste gedrückt wurde, nicht welche taste, dazu musst du noch getch() benutzen
hier ein einfaches beispiel:
#include <conio.h> #include <stdio.h> void main(void) { int zeit; int ende; printf("Warte....."); zeit = 0; ende = 1000000; while (zeit < ende) { zeit++; if (kbhit()) { int key = getch(); if (key == 27) /* 27 == ESC */ break; } } printf("\nFertig"); }
das prog beendet sich wenn es fertig gezählt hat oder wenn man vorher die esc taste drückt
-
bozo schrieb:
kbhit() liefert nur ob ein taste gedrückt wurde, nicht welche taste, dazu musst du noch getch() benutzen
hier ein einfaches beispiel:
#include <conio.h> #include <stdio.h> void main(void) { int zeit; int ende; printf("Warte....."); zeit = 0; ende = 1000000; while (zeit < ende) { zeit++; if (kbhit()) { int key = getch(); if (key == 27) /* 27 == ESC */ break; } } printf("\nFertig"); }
das prog beendet sich wenn es fertig gezählt hat oder wenn man vorher die esc taste drückt
integer kann keinen wert von 1000000 aufnehmen (nur bis 65535)
-
integer kann keinen wert von 1000000 aufnehmen (nur bis 65535)
int ist im grunde signed int und nicht unsigned int
16 bit:
signed int / int -32768...32767
unsigned int 0...6553532 bit:
signed int / int -2147483648...2147483647
unsigned int 0...4294967296somit ist deine 65535 falsch
und normalerweise kann man wohl davon ausgehen, dass ein 32 bit compiler benutzt wird und kein 16 bit compiler und int 32 bit breit ist
-
Ich kenne EINE MENGE COMPILER die Int als 16 bit interpretieren. Falls es auf die Größe ankommen sollte, dann würde ich folgenden Code schreiben:
#if (sizeof(int) == 2) unsigned long ende_ 1000000; #else unsigned ende_ 1000000; #endif
-
1. es ist nur ein kleines beispiel, nichts weiter, also nicht so viel aufwand damit
2. der topic ist "ESC Abfrage ohne Programm anzuhalten unter Windows", unter windows wird man wohl heutzutage nun wirklich einen 32 bit compiler benutzen
-
bozo schrieb:
integer kann keinen wert von 1000000 aufnehmen (nur bis 65535)
int ist im grunde signed int und nicht unsigned int
16 bit:
signed int / int -32768...32767
unsigned int 0...6553532 bit:
signed int / int -2147483648...2147483647
unsigned int 0...4294967296somit ist deine 65535 falsch
und normalerweise kann man wohl davon ausgehen, dass ein 32 bit compiler benutzt wird und kein 16 bit compiler und int 32 bit breit ist
ich habe mit absicht integer und nicht int o. undigned int geschrieben weil mir dabei ging das integer standardmaessig 2 byte gross sind. auf deine 1000000 bezieht sich meine 65535 (unsigned int). da du mit einer so hochen positiven zahl gerechnet hast, ging ich davon aus dass es unsignd int ist.
-
ich habe mit absicht integer und nicht int o. undigned int geschrieben
in c gibt es aber kein "integer", und dies hier ist ein c prog
weil mir dabei ging das integer standardmaessig 2 byte gross sind.
stimmt nicht, int ist immer so gross wie es für die zugrundeliegende architektur am optimalsten ist, z.b. 16 bit cpu/compiler 16 bit int, 32 bit cpu/compiler 32 bit int, ...
bei allen aktuellen compilern ist es 32 bitauf deine 1000000 bezieht sich meine 65535 (unsigned int). da du mit einer so hochen positiven zahl gerechnet hast, ging ich davon aus dass es unsignd int ist.
du brauchst aber von nichts ausgehen, einfach in den code schauen reicht doch
ps: ist schon lustig was man alles so schreiben kann zu einer kleinen sache, an deinem "integer kann keinen wert von 1000000 aufnehmen ..." fehlte eigentlich nur "bei 16 bit breiten integern/compilern"
-
Dann schreibt doch einfach "unsigned long int" und schon gibts keine Probleme.
Aber bis auf 1mio zählen, das macht der PC doch in unter 1sec, da bekommt man ja
überhaupt nichts mit bzw. hat nichtmal Zeit zum drücken.