Artery Geschrieben 16. April 2011 Teilen Geschrieben 16. April 2011 Hallo leute, Wenn ich hab etwas geschrieben in dem die Pfeiltasten abgepfragt werden und dann etwas passiert, ich weiß das Pfeiltasten keinen direkt eigenen Ascii code haben sondern, aus 2 zeichen bestehen. laut dieser Website: Datasource :: Programmierung :: Tastaturcodes unter DOS wäre das 0 - 80 für Pfeil nach unten. Es ist kein Problem wenn ich jetzt ein doppeltes _getch(); mache und dann abfrage obs z.b. 80 ist, nur wenn man jetzt eine andere Taste drückt, nimmt er das Zeichen z.b. 109 für 'm' dann ist beim 2ten getch nichts mehr im puffer! Jetzt wollte ich sozusagen beim ersten Zeichenabfragen, also ob dies nun das Vorzeichen der Pfeil tasten ist oder nicht, nur jetzt habe ich das Problem das es anscheinend nicht 0 ist welches Zeichen ist es denn nun? Also wenn ich jetzt hab char tmp = _getch(); if(tmp == ??) was muss da jetzt hin? mit 0 geht es nicht... MfG Artery Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 16. April 2011 Autor Teilen Geschrieben 16. April 2011 Das nervt iwie wenn man den Startbeitrag nicht editieren kann :/ Es würde auch reichen, wenn mir jemand sagt wie ich Abfrage ob der Tastaturpuffer leer ist Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 16. April 2011 Autor Teilen Geschrieben 16. April 2011 Ernsthaft wieso gibts keine Editfunktion mehr?? Habs jetzt gelöst und zwar ist das Zeichen -32 nicht 0 :/ habs rausgefunden habe in dem ich mir einfach mal den Wert angeguckt habe der beim Erstenmal in tmp stand =) Nur eine Frage wenn ich 2 tasten aufeinmal drücke funktionierts nicht mehr voran liegt das? Bzw. wie kann ich das fixen? Edit: Wieso kann ich den Beitrag editieren die anderen nicht?? while(1) { while(_kbhit()== 0) { char tmp = _getch(); if(tmp == -32) { char tmp2 = _getch(); if(tmp == -32 && tmp2 == 72 || tmp == -32 && tmp2 == 80) { tmp = tmp2; if(tmp == 80) { if(ButtonCrsLoc == 6) { ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,true,0); ButtonCrsLoc = 0; ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,false,0); } else { ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,true,0); ButtonCrsLoc = ButtonCrsLoc + 1; ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,false,0); } break; } if(tmp == 72) { if(ButtonCrsLoc == 0) { ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,true,0); ButtonCrsLoc = 6; ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,false,0); } else { ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,true,0); ButtonCrsLoc = ButtonCrsLoc - 1; ArrowBuilder(3,12,YWert[ButtonCrsLoc],24,false,0); } break; } } } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Snipes83 Geschrieben 16. April 2011 Teilen Geschrieben 16. April 2011 Ernsthaft wieso gibts keine Editfunktion mehr?? Edit: Wieso kann ich den Beitrag editieren die anderen nicht?? Weil man zum editieren ein 15 Minuten Zeitfenster hat! Danach gehts nicht mehr! Und das war auch vor der Design Änderung schon so! Grüße Snipes83 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 16. April 2011 Autor Teilen Geschrieben 16. April 2011 (bearbeitet) So hab nochmal was ausprobiert, ist etwas übersichtlicher: while(_kbhit() == 0) { cout << "1"; tmp = _getch(); if(_kbhit() == 1) { cout << "Seems good"; fflush(stdin); } if(tmp == 109) { cout << tmp; } } Wenn ich jetzt 2 tasten gleichzeitig drücke springt der in die Erste if abfrage rein gibt "Seems Good" aus, danach springt er aus der while-schleife, und wenn ich weitere while Schleife folgen lassen ungefähr so: while(_kbhit() == 0) { cout << "1"; tmp = _getch(); if(_kbhit() == 1) { cout << "Seems good"; bug = true; fflush(stdin); } if(tmp == 109) { cout << tmp; } } while(_kbhit() == 0) { cout << "2"; tmp = _getch(); if(_kbhit() == 1) { cout << "Seems good"; fflush(stdin); } if(tmp == 109) { cout << tmp; } } übergeht er die zweite schleife und macht mit den folgenden Befehlen weiter! Wenn ich z.b. eine der Schleifen in while(1)schleifen packe führt er alles in der schleife aus, ausser die Schleife mit _kbhit()... Das heißt im Endeffekt, das beim gleichzeitigen Drücken zweier Tasten, das Event _kbhit() ständig true bleibt. Ich habe bisher nur eine Möglichkeit gefunden das zu unterbinden, und zwar mit einer Eingabeaufforderung wie cin. Nur das Problem ist, das ich nicht immer wenn jemand 2 tasten drückt ne Eingabe fordern kann... Wie kann ich _kbhit() wieder auf false setzte ohne eingabe?? Bzw. woran liegts das es true bleibt? MfG Artery PS: Das ist echt wichtig das ich das löse :/ Bearbeitet 16. April 2011 von Artery Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 17. April 2011 Autor Teilen Geschrieben 17. April 2011 okay habs gelöst , einfach ein _getch(); wenn der in die if bedingung springt und alles läuft sogut wie wunderbar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.