webForumDet fria alternativet

Kolla om tangent är nedtryckt....

C/C++

10 svar · 579 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#1

Hur gör man om man vill kolla om typ ESC trycks ned? Jag har en loop som ser ut typ så här:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
While (z<1000)
{
//Massa kod....

}

När man trycker på ESC så vill jag att loopen ska avbrytas genom att man tilldelar z ett värde över 1000. Hur kollar man enklast om en tangen bli nedtryckt alltså? Hellst genom att ange ASCII värdena.

Jag kör i TCplus...

//M@rtin

Medlem sedan apr. 20002 487 inlägg
#2

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
char key = getch();

if(key == 27) break;

Nåt sånt iaf ;)

Medlem sedan dec. 19992 085 inlägg
#3

Okej nu har jag testat och det funkar. Men det funkade inte riktigt som jag ville :(

När man läser in en tangent med getch() så tvingar den programmet att vänta tills en tangent trycks in. Jag har en while loop som ska köras hela tiden men om en knapp trycks in så ska den lagras i en variabel. Hur gör man detta?

//M@rtin

Medlem sedan juni 20001 839 inlägg
#4

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
char key;
while (true)
{
if keypressed()
{
key = getch();
}

}

Nått åt det hållet?

tror att det heter keypressed.. eller så blandar jag ihop det med pascal...

Det var ju ett tag sedan jag höll på aktivt.. :l

------------------
Mvh Yrin Eldfjell

Medlem sedan dec. 19992 085 inlägg
#5

Nej keypressed finns inte i c++.

Fler förslag?

//M@rtin

Medlem sedan apr. 20003 971 inlägg
#6

Använd kbhit i kombination med getch. Jag har skrivit ett exempel som skriver ut slumpade tecken tills man avbryter med Escape.

#include <stdio.h> // printf
#include <stdlib.h> // rand
#include <conio.h> // getch, kbhit

int main()
{
    // Evighetsloop
    while(1) {
        // Visa att någonting händer
        printf("%d", rand());
        // Kolla om en tangent är nedtryckt
        if(kbhit()) {
            // Hämta nedtryckt tangent
            int key = getch();
            // Kolla om tangenten är 27(escape)
            if(key == 27) {
                // Avbryt programmet
                break;
             }
        }
    }
    return 0;
}

------------------
- Swey
Glömde jag säga snälla?

[Redigerat av Swey den 30 sep 2000]

Medlem sedan dec. 19992 085 inlägg
#7

Aha.. kbhit heter det alltså..

Tack så mycket Swey! :)

//M@rtin

[Redigerat av M@rtin den 30 sep 2000]

Medlem sedan sep. 200024 inlägg
#8

Nån som vet hur man gör det här på linux?
Har inte conio.h :(

[Redigerat av jockee den 16 aug 2001]

Medlem sedan aug. 200086 inlägg
#9

i linux får man använda sig av select(2) har jag för mig - kolla mansidan så ska det finnas ett exempel på exakt hur..

Medlem sedan sep. 200024 inlägg
#10

Tack för tipset, det var ett steg närmare men tyvärr så märker den inte om man har tryckt på nåt förrän man skickar det med enter här heller.
Kanske har hittat vad jag letat efter i allegro.h men har inte testat det än. (d/l nu) :)
/Jockee

Medlem sedan aug. 200086 inlägg
#11

En annan sak som kan funka är setvbuf, jag har bara använt det för obuffrad utmatning, men det borde funkar för stdin oxo.. Testa =)

För obuffrad utmatning:
setvbuf( stdout, NULL, 0, _IONBF );
(argumenten kan vara lite omkastade =))

(Tror dock inte att det där funkar så som du vill iaf, det är nog snarare inmatningsfunktionerna som är fel.)

[Redigerat av jsundin den 23 aug 2001]

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)