Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkin lukeminen ilman enteriä?

Quirzo [24.09.2006 15:55:00]

#

Miten saan tehtyä, että kun on vaikka pelissä valinta, 1,2 vai 3, että käyttäjä painaa vain 1, 2 tai 3, EIKÄ tarvitse painaa enteriä?

Kiitos...

miiro [24.09.2006 16:07:01]

#

"Keskustelu: C / C++ ja Delphi / Pascal: Merkin lukeminen ilman enteriä?"
Huomaatkos, että tämä foorumi on aika monelle ohjelmointikielelle? Jos nyt kertoisit, mitä ohjelmointikieltä tarkoitat?

Quirzo [24.09.2006 16:07:43]

#

Anteeksi, c++.
Ja löysin jo ehkä vastauksen:

 char choice;
    cin >> choice;
    cin.ignore(INT_MAX,'\n');

    cout << endl << endl;

Eipäs ollutkaan. Yhä apua kaivataan :S

Pekka Karjalainen [24.09.2006 16:29:49]

#

Olio cin on suunniteltu lukemaan syötettä, joka ei välttämättä tule näppäimistöltä. Esimerkiksi voisit ajaa ohjelmasi näin:

ohjelma < data.txt

ja komentotulkki järjestäisi data.txt-tiedoston sisällön ohjelmalle syötteeksi. Ohjelma ei voi mitenkään tietää, että se tulee tiedostosta, eikä näppäimistöltä. Ero on tietenkin se, että jos ajat ohjelmaa konsolilta, se jää aina odottamaan syötettä, jos cin yrittää lukea, eikä puskurissa ole yhtään syötettä. Puskuriin pusketaan syötettä aina kun painetaan enteriä, joten et siitä enteristä pääse mitenkään eroon. (paitsi jos jossain systeemissä voi asettaa niin, että syöte menee heti puskuriin joka napin jälkeen)

Tuo <-merkintä toimii Unixin/Linuxin shelleissä ja DOSsissa sekä mahdollisesti muissakin systeemeissä. Vähän vastaavan vaikutuksen saa monissa graafisissa ympäristöissä, jos kiskoo data.txt-ikonin ohjelmaikonin päälle.

Yksittäisen näppäintenpainallusten lukemiseen tarvitset jonkin kirjaston, joka lukee matalan tason tietoja laitteistosta tai ottaa niitä vastaan käyttöjärjestelmän toimittamina. Oikean sellaisen osaamme neuvoa, kunhan kerrot millä systeemillä teet ohjelmaasi, jonka pitää lukea syötettä tällä tavalla. Käyttis ja kääntäjä nyt ainakin olisi hyvä tietää.

Esimerkiksi vanhan Turbo C -kääntäjän mukana tuli conio.h-otsikkotiedosto, jossa oli iki-ihana kbhit()-funktio. Se palauttua true (tai 1), kun näppäintä oli painettu, ja se näppäintieto oli luettavissa getch()-kutsulla sen jälkeen. Jos puskuri oli tyhjä, getch() juuttui odottamaan, että näppäintä painetaan. Mutta se on viime vuosituhannen juttuja.

Metabolix [24.09.2006 18:30:38]

#

Yksinkertaisemmin ilman pitkiä ja hankalia selityksiä: ei onnistu pelkällä alustariippumattomalla C++:lla. Tarvitset jotakin tukevampaa, kuten ncurses- taikka PDCurses-kirjaston. Aiheesta kertoo lisää ncurses-opas.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta