Linux c++ rozhodování stiskem klávesy v konzoli

Pavel Hudeček edizon na seznam.cz
Pátek Září 3 11:54:21 CEST 2021


Dobrý den všem,



Potřebuji něco, co by v linuxové konzolové aplikaci čekalo na stisk klávesy 
a pak detekovalo jaká to byla. Tzn něco ve stylu:

Press Y to Yes or N to No

Chci ale, aby nebylo potřeba mačkat enter.




Ve windows používám:



// wait for user choice from 2 to 3 keys (key3=0 or key4=0 -> not used)

// key1/key2/key3 is lower case, keyboard input is independent =============
======================

char choiceKey(char key1, char * text1, char key2, char * text2, char key3=0
, char * text3="", char key4=0, char * text4="") {

    char ch;


    while(1) {

        ch = _getch();

        if (ch<'a' && ch>='A' && ch<='Z') ch += 'z'-'Z'; // convert to lower
 case

        if (ch==key1) {

            if (text1[0]!=0) printf("%s\n", text1);

            break;

        } else if (ch==key2) {

            if (text2[0]!=0) printf("%s\n", text2);

            break;

        } else if (key3!=0) if (ch==key3) {

            if (text3[0]!=0) printf("%s\n", text3);

            break;

        } else if (key4!=0) if (ch==key4) {

            if (text4[0]!=0) printf("%s\n", text4);

            break;

        }

    }

    return ch;

}

Jenže _getch není, resp. není conio.h.

Našel jsem:

https://stackoverflow.com/questions/8792317/where-is-the-conio-h-header-file
-on-linux-why-cant-i-find-conio-h


Doinstaloval:

sudo apt-get install libncurses5-dev libncursesw5-dev


Použil curses.h a z něj cbreak + getch

Jenže:


/usr/bin/ld: /tmp/cceqblBw.o: undefined reference to symbol '_ZNSt8ios_base4
InitD1Ev@@GLIBCXX_3.4'

/usr/bin/ld: //lib/arm-linux-gnueabihf/libstdc++.so.6: error adding symbols:
DSO missing from command line




A dál už nevím, je to RPI s 32b ARM




Díky,

PH











------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210903/a69d6ccf/attachment.html>


Další informace o konferenci Hw-list