Avatar billede bjarke Nybegynder
07. juni 2000 - 19:29 Der 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.

Hvad gør jeg?

-Bjarke
Avatar billede bjarke Nybegynder
07. juni 2000 - 19:31 #1
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)?
Avatar billede tigerdyr Nybegynder
07. juni 2000 - 21:15 #2
Prøv at stille det spørgsmål på sslugs mail lister (listen over C++), mener jeg tidligere har set spørgsmål om samme emne!
Avatar billede soepro Nybegynder
08. juni 2000 - 09:04 #3
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.
Avatar billede bjarke Nybegynder
08. juni 2000 - 12:33 #4
Kommando:
gcc test.cpp -o test.exe

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));
}
Avatar billede dmk Nybegynder
09. juni 2000 - 16:11 #5
Hej Bjarke

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().

DMK
Avatar billede bjarke Nybegynder
14. juni 2000 - 14:06 #6
DMK >> Møg :-( Men kan du ikke finde ud af hvordan man bruger getch() fra curses.h?

Soepro >> Jeg tror ikke, at det har noget med "nested comments" at gøre, da jeg ikke har nogen kommentarer i mit program.
Avatar billede dmk Nybegynder
14. juni 2000 - 14:45 #7
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.


DMK
Avatar billede bjarke Nybegynder
14. juni 2000 - 22:10 #8
Jeg har fundet ud af lidt.

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"

Jeg bruger funktionen på følgende måde:

void Getch()
{
  int c;
  cbreak();

  do
    c=getch();
  while(c==-1);
  return char(c);
}

Prøv evt. at kigge i "man curs_getch".

Kan du komme lidt videre DMK???
Avatar billede baz Nybegynder
19. juli 2000 - 17:25 #9
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)
    ;
 
  endwin();
}
Avatar billede bjarke Nybegynder
21. juli 2000 - 22:10 #10
Takker baz. Det kører :-)
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