beenden durch esc, f1 und f2
-
hallo leute, ich habe mir vor kurzem ein buch über c++ gekauft im buch habe ich mein erstes hallo welt-programm gemacht, jedenfalls beendet er die anwendung sofort wenn ich sie öffne dann habe ich cin.get(); vor return 0; eingefügt, so dass sie anwendung erst beendet wird wenn ich eingabe drücke, könnte mir vielleicht jemand verraten wie ich die anwendung auch durch ESC, F1 und F2 ändern kann? wäre echt nett, danke im vorraus!
-
Hi,
das geht ganz einfach. Wie du bestimmt weist, ist jedem Zeichen im Alphabet ein ASCII-Wert zugeordnet worden. "ESC" etc. kann man nicht in Buchstaben darstellen. Die Lösung ist, als Abfrageargument deren ASCII-Codes zu nehmen. Du liest also erst das eingegebene Zeichen ein, wertest dessen ASCII Wert aus, und prüfst, ob es sich um ESC, F1 usw. handelt. Kleines Beispiel:
char eingabe = getchar (); // Einzelnes Zeichen einlesen if (eingabe == 27) // 27 ist der ASCII Code von ESC. Wenn ja dann, return 0; // 0 returnen, und somit beenden (funktioniert nur in der main ())!)Bei F1 etc. ist das so eine Sache. Diesen Sondertasten ist nicht wirklich ein ASCII Code zugeordnet worden. Zwar kannst du dessen Wert auch prüfen, und erhälst auch einen Code, aber diesen Code besitzen bereits andere Zeichen. Hier müsstest du auf Virtuelle Keycodes von Windows zugreifen, bzw. entsprechende HEX-Werte nehmen. Wenn du möchtest, kann ich dir das auch noch erklären.
MfG mikey.
-
ja bitte, das wäre echt nett
-
Windows hat für Sondertasten eigene Codes definiert. Diese nennen sich Virtual Key Codes, und sind in der MSDN hier dokumentiert. (Sind nichts anderes als Typedefs auf ein paar HEX-Werte)... Die Fallunterscheidung (if-Abfrage) unterscheidet sich nicht großartig von der vorherigen:
if (eingabe == VK_F1) return 0;Damit die Codes dem Compiler bekannt sind, musst du am Anfang des Codes windows.h inkludieren:
#include <windows.h>Und offensichtlich hast du den oberen Code, den ich dir gegeben habe noch nicht kompiliert. Denn um getchar nutzen zu können, musst du <conio.h> inkludieren.
MfG mikey.
-
Hat's denn wenigstens geklappt?!
-
sorry das meine antwort so spät kommt, ich habe im moment kein internet, der router ist beschädigt, ich kriege am 1. juni neues internet
ich kriege eine fehlermeldung in der datei windows.h und mit esc klappts auch nicht
-
snob293 schrieb:
sorry das meine antwort so spät kommt, ich habe im moment kein internet, der router ist beschädigt, ich kriege am 1. juni neues internet
ich kriege eine fehlermeldung in der datei windows.h und mit esc klappts auch nichtBei mir klappt des gut mit esc, aber man muss danach noch enter drücken
-
ich kriege eine fehlermeldung in der datei windows.h und mit esc klappts auch nicht
"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung. Ich habe dir eine funktionierende Lösung geboten, du hast diese offensichtich nur falsch angewendet. Lass mal deinen Code sehen.
-
genau das ist das problem kaffee, es soll bei esc sofort beendet werden... ich schick den code später ab, mein internet funktioniert gerade nicht so gut mikey
-
schau dir mal das an: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39320.html
-
Dann ersetz die Zeile einfach mit dieser:
char eingabe = getch (); // Einzelnes Zeichen einlesen
-
hi, so müsste es auch gehen:
while ((int)getch() != 27); // esq taste while ((int)getch() != 0); // F1 taste zuerst 0, while ((int)getch() != 59); // dann 59, F2: 0, dann 60 etcvg tesu