Avatar billede spiritusanta Nybegynder
15. februar 2004 - 10:43 Der er 9 kommentarer og
1 løsning

Hvordan bruger man piletasterne?

Ey
Nogen der ved hvordan man kommer i kontakt med tastaturets piletaster, enter og esc?

Spørgsmål 1:
Skal bruge en kode, som ser ud på følgende måde
if(højre pil trykket) ect
{
cout << "Du har trykket på højre pil";
}

Spørgsmål 2:
En tabel over tasternes koder, eller lille program, der kan finde ud af hvad de enkelte taster hedder.

Mvh Jonas
Avatar billede esben_aaberg Nybegynder
15. februar 2004 - 11:47 #1
Du skal bruge ascii værdierne:
27 = ESC
28 = pil til højer
29 = pil til venstre
30 = pil op
31 = pil ned

http://www.jimprice.com/ascii-0-127.gif
http://www.asciitabel.com

Jeg ved ikke lige hvordan program koden skal se ud da et er over 7 år siden jeg rigtig havde fingerne i C/C++!
Avatar billede arne_v Ekspert
15. februar 2004 - 11:48 #2
Standard C/C++ kan ikke læse keystrokes.

Du skal derfor bruge et eller andet platform/compiler specifikt, så
spørgsmålet er derfor hvilken platform/compiler bruger du ?
Avatar billede arne_v Ekspert
15. februar 2004 - 11:54 #3
Hvis du f.eks. bruger en windows compiler som er kompatibel med de gamle
DOS compilere, så vil du kunne bruge:

#include <conio.h>

og bruge funktionen getch, som vil returnerer
  0x1B for ESC
  0x00 for piletaster efterfulgt af 75 (venstre)/77 (højre)/72 (op)/80 (ned)

På linux vil du nok skulle bruge curses.

I native Win32 skal du have fat på GetAsyncKeyState funktionen
Avatar billede spiritusanta Nybegynder
15. februar 2004 - 13:11 #4
Mange tak for det der link esben aaberg :)

arne v >> Jeg bruger ms visual c++
Avatar billede arne_v Ekspert
15. februar 2004 - 13:31 #5
Følgende ser ud til at virke i MS VC++:

#include <conio.h>

#include <iostream>

using namespace std;

int main()
{
  cout << "Press keys (ESC to exit)" << endl;
  while(true)
  {
      int c = getch();
      if(c == 0x1B)
      {
        cout << "ESC read" << endl;
        break;
      }
      else if(c == 224)
      {
        c = getch();
        switch(c)
        {
            case 75:
                cout << "left arrow read" << endl;
                break;
            case 77:
                cout << "rigth arrow read" << endl;
                break;
            case 72:
                cout << "up arrow read" << endl;
                break;
            case 80:
                cout << "down arrow read" << endl;
                break;
        }
      }
      else
      {
        cout << (char)c << " read" << endl;
      }
  }
  return 0;
}
Avatar billede spiritusanta Nybegynder
15. februar 2004 - 13:44 #6
jeps det virker mange tak :)
har dog lige et spørgsmål til koden, hvad bruger du følgende til?
=======================================
    else if(c == 224)
      {
        c = getch();
        switch(c)
=======================================
og hvordan finder du ud af hvilken "case" knappen er?
Avatar billede arne_v Ekspert
15. februar 2004 - 13:47 #7
MS VC++ getch returnerer tilsyneladende 224 + en kode for bl.a. pile taster.

Spørg mig ikke hvorfor.

Du må kunne bruge isupper(c) og islower(c) til at teste på case.
Avatar billede spiritusanta Nybegynder
15. februar 2004 - 13:49 #8
oki mange tak for hjælpen :)
Avatar billede spiritusanta Nybegynder
15. februar 2004 - 16:19 #9
Hvis du stadig er der arne_v, har jeg lige et sidste spørgsmål, hvad bruger du den der while(true) til, og hvordan kan programmet stoppe, hvis der trykkes ecs?
Avatar billede arne_v Ekspert
15. februar 2004 - 16:21 #10
while(true) er en uendelig løkke

      if(c == 0x1B)
      {
        ...
        break;
      }

gør at den hopper ud ved ESC.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester