Zum Inhalt springen

Pfeilstasten codes


Artery

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

				}

			}	

		}				

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Artery
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...