webForumDet fria alternativet

Läsa PILAR (ascii)

C/C++

4 svar · 500 visningar · startad av JPE

Medlem sedan juli 200310 inlägg
Frågan#1

I t.ex qbasic kan man läsa av inmatade piltangenter enligt
a$=input$(1) (detta stannar upp och läser in ett tecken till a$)
if a$=chr$(0)+chr$(78) then...

(kan inte dubbelkoderna i huvudet, men pilarnas ascii koder
ligger där kring 0+70 till 0+80 ungefär

Men så frågan - är det någon som vet hur man gör detta i C.
(alt C++) ??

typ:
char ch;
ch=getch();
if(ch== ?????)...

eller på nått annat vis, bara man på nått vis kan få bekräftat att
en av pilarna (eller annat tecken med dubbelkod) har tryckts
ned av användaren

Medlem sedan aug. 20021 752 inlägg
#2

Du är på rätt väg,

ch=getch();
if(ch==70)
printf("En pil tryckt!");

Har inte provat det men det borde fungera.

/Viktor

Medlem sedan juli 200310 inlägg
#3

nix

Alltså piltangenterna, liksom 'page up' , page down' och en del till
har inga egentliga ascii-koder. (varken 7 bitars eller 8 bitars)
Istället har de s.k. dubbelkoder och i QBasic går det att avläsa dessa dubbelkoder. Låt oss säga att 'Arrow down' har dubbelkod
0 + 78. (dubbelkode börjar alltid på "noll plus ett ascii")

att läsa av om denna tangent blivit nedtryckt av användaren
är alltså inte samma sak som att tangent med ascii 78 trycks ner, även om 0+78 förvisso är 78.

Så så enkelt som du vill göra det till, sorry...

Medlem sedan aug. 20021 752 inlägg
#4

Ok, det var fel, då gör vi ett nytt försök :)

Denna kod är baserad på det som har har hittat här, Goggle

UpArrow = 328
DownArrow = 336
RightArrow = 333
LeftArrow = 331
Home=327
End=335

#include <conio.h>
#include <iostream>
using namespace std;

int mygetch();
int main()
{
	cout << mygetch() << endl;
	return 0;
}

int mygetch()
{
	int key;
	key=getch();
	if(key==224)
		key=getch()+256;
	return(key);
}

Jag har provat den i VS.NET (C++) och där fungerar den perfekt.

/Viktor

Medlem sedan juli 200310 inlägg
#5

Jo, det fungerade ju mycket bättre. Fast måste erkänna att jag inte riktigt förstår det där med 224. Efter MYCKET testande
fick jag själv fram följande lösning (använder själv alltid "C-style", om det inte handlar om ett större objektorienterat projekt):

char mygetch(void)
{
char c;
c=getch();
if(c==0)c=getch();
return c;
}

När man trycker på en 'dubbelkodstangent' läses alltså TVÅ
tecken in, och det första är (nästan) alltid en nolla.
Pilarnas dubbelkoder är 0+72,0+75,0+77 och 0+80

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)