Kirjoittaja Aihe: merkin lukeminen näppäimistöltä g++ -koodissa [ratkaistu]  (Luettu 2467 kertaa)

seniori

  • Käyttäjä
  • Viestejä: 83
    • Profiili
Varmaan ihan helppo juttu mutta kun enlöydä oikeaa funktiota:
tarvitsen ohjelmassa kohtaa, jossa käyttäjä painaa jotain näppäintä ja homma jatkuu sitten sen mukaan mitä näppäintä on painettu. Funktion pitäisi siis lukea näppäin heti, ilman enteriä.
Käytän kirjoittamiseen geditiä ja muut jutut teen konsolissa.
Erikoisnäppäimistä (shift , ctrl, alt jne) ei nyt ole kyse mutta kyllä niidenkin käyttö  kiinnostaisi.
Olen pari tuntia kahlaillut ohjeita ja jo vähän väsyttää.
« Viimeksi muokattu: 20.01.09 - klo:18.27 kirjoittanut seniori »

Vapaan koodin kananmuna

  • Käyttäjä
  • Viestejä: 1536
    • Profiili
En Vastaa Vaikeisiin Kysymyksiin.

seniori

  • Käyttäjä
  • Viestejä: 83
    • Profiili
Vs: merkin lukeminen näppäimistöltä g++ -koodissa
« Vastaus #2 : 19.01.09 - klo:19.14 »
Tuli muutaman päivän tauko, kun lapsenlapset pyllähtivät yökylään.
Kiitos ohjeesta, en kuitenkaan saanut siinä olevia juttuja (getch() yms.) toimimaan.
Aikani nettiä tutkittuani, sain alla olevan ratkaisun mutta en kylläkään ymmärrä
mitä kaikkea siinä oikeastaan tapahtuu mutta nyt ohjelmani toimii niin kuin olin halunnutkin.
Sitä ohjelmaa, jota olin tekemässä en kehtaa näyttää mutta alla oleva on eräänlainen testiohjelma.
Kääntäjä oli g++ vaikka kyseessä taitaakin olla tuiki tavallista c-koodia ja kommentitkin ovat ehkä mitä sattuu:
/*
ubuntu 8.10 koneessani tein seuraavat jutut:

sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
ohjelman alkuun #include<curses.h>
ja kääntäminen: g++ ohjelma.cpp -o testi -lncurses
*/
#include<curses.h>
int main()
{ char mrk;
  initscr();   // tyhjentää ruudun (talletti kuitenkin näkymän)
  cbreak();    // näppäinpainallukset käyttöön ilman enteriä
  noecho();    // painettua näppäintä ei heti näytetä, jos ohjelmaan pitäisi antaa syöte,
               // niin ennen sitä funktio echo()
  do{
     printw("paina jotain...q lopettaa ajon");
     mrk=getch(); //talletetaan merkki muuttujaan mrk
     printw("\npainoit näppäintä %c = %d\n",mrk,mrk); //ncursesin sisällä käytettävä printw
     }while(mrk != 'q');
  endwin(); // palataan vanhaan kuvaruutuun, jos tätä ei tee konsoli menee jotenkin sekaisin
  printf("painoit viimeksi näppäintä %c = %d\n",mrk,mrk); // nyt voidaan taas käyttää printf-funktiota
  return 0;
}

Pellervo Kässi

  • Käyttäjä
  • Viestejä: 191
    • Profiili
Vs: merkin lukeminen näppäimistöltä g++ -koodissa
« Vastaus #3 : 20.01.09 - klo:10.09 »
Tuo curses on *nix-järjestelmissä toimiva käyttöliittymäkirjasto konsoliohjelmiin. Eli sisällytät tuossa tapauksessa curses-kirjaston funktiot koodiisi kirjoittamalla tuon include <curses.h>:n tuohon alkuun.

Noiden vkkm:n antamien ohjeiden funktioiden käyttämiseen sinun pitää sisällyttää iostream.h kirjasto. Kyseinen kirjasto on siitä mukava, että kyseessä on cpp:n vakiokirjasto, jolloin tekemääsi ohjelmaa pystyy käyttämään myös windows-koneissa (kunhan se on niille käännetty, tietysti). Curses puolestaan vaatii *nix/bsd-mallin terminaalin, windowsiinhan sellaisen saa kyllä asentamalla cygwinin.

Cursesista (ncursesista) lisää:
http://invisible-island.net/ncurses/
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

seniori

  • Käyttäjä
  • Viestejä: 83
    • Profiili
Vs: merkin lukeminen näppäimistöltä g++ -koodissa
« Vastaus #4 : 20.01.09 - klo:18.26 »
Kiitos Pellervolle lisätiedoista.
Tutkin mielelläni antamiasi linkkejä.