<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 ;)
10 svar · 579 visningar · startad av M@rtin
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
<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 ;)
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
<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
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]
Aha.. kbhit heter det alltså..
Tack så mycket Swey! :)
//M@rtin
[Redigerat av M@rtin den 30 sep 2000]
Nån som vet hur man gör det här på linux?
Har inte conio.h :(
[Redigerat av jockee den 16 aug 2001]
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..
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
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]