07. juni 2000 - 19:29Der er
9 kommentarer og 1 løsning
getch(), clrscr(), textcolor() mm
Så blev det også min tur til at prøve linux af :-)
Mit problem er, at jeg savner vældig meget funktionerne fra conio.h og til dels fra process.h (exit()). Jeg kan se, at der ligger nogle ting i curses.h og ncurses.h, som ligner ganske meget, men jeg kan ikke få det til at køre.
Det jeg savner klart mest er getch(), for med den kan jeg lave stort set alle de indlæsningsfunktioner jeg har brug for. getch() er også den eneste funktion jeg har prøvet under linux.
Fungerer linux i øvrigt også med udvidet tastaturkode (nul-byte)?
Hvilken compiler bruger du ??? Prøv at søge include (header filerne) igennem efter de søgte funktioner. Jeg har sommetider været ude for at header-filen ikke fungerede hvis jeg kørte med "nested comments", men fint hvis jeg ikke gjorde.
Svar: ...In function 'main': ...o(.text+0x7): undefined reference to 'stdscr' ...o(.text+0xd): undefined reference to 'wgetch' collect2: ld returned 1 exit status
Programmet: #include <stdio.h> #include <curses.h> // også prøvet ncurses.h
int main(int argc, int argv) { int a=getch(); printf("%c", char(a)); }
Jeg har selv ledt efter noget tilsvarende getch i linux, og det er desværre endnu ikke lykkedes. Den eneste løsning jeg har fundet er, at bruge fgetc(stdin). Den har dog det problem, at den venter på et return, og den er ikke uden echo, som getch er... Æv.
Mht. headers, så har jeg gjort det til en vane altid at inkludere unistd.h i linux. Den indeholder mange af de ting, som jeg normalt har brug for. Dog ikke getch().
Jeg har fået den til at acceptere getch når jeg kompiler og linker, men når jeg kører programmet sker der ikke rigtig noget. Jeg syntes ikke jeg kan få den til at returnere andet end -1...
Du kan selv prøve at forske videre, og hvis du finder ud af noget, så skriv det lige! Jeg vil meget gerne vide hvordan det kan gøres. :-)
Du skal have -lcurses på når du kompiler for at få den til at acceptere getch.
Først skal du sætte en mode med cbreak(). Ellers checker den blot om der ligger nogle tegn i keyboard-bufferen uden at vente på, at der bliver trykket en tast. Hvis der ikke er trykket nogen tast, returnerer den -1. Derfor.
Nå men, så langt så godt. Den compiler fint, men giver følgende meddelelse:
"Segmentation fault (core dumped)"
med kommandoen "gcc test.cpp -o test.exe -lcurses"
Du glemmer at kalde initscr() for at initialisere ncurses biblioteket. Vedlagte programstump kan oversættes med gcc -ofoo foo.cpp -lncurses
Programmet busy-waiter på et tastetryk, udskriver hvad du har trykket på, og busy-waiter på endnu et tastetryk, før det afslutter.
#include <ncurses.h> #include <stdio.h>
int main(int argc, int argv) { int a; initscr(); cbreak(); noecho(); while((a=getch())==ERR) ; printf("You pressed '%c', press any key to exit", char(a)); fflush(stdout); while((a=getch())==ERR) ;
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.