Je ne parviens pas à trouver un fichier d'en-tête équivalent pour conio.h sous Linux.
Existe-t-il une option pour la fonction getch()
& getche()
sous Linux?
Je veux faire un menu de base de cas de commutateur où l'utilisateur donnera son option simplement en appuyant sur une touche et le processus devrait être avancé. Je ne veux pas laisser l'utilisateur appuyer sur ENTER après avoir appuyé sur son choix.
#include <termios.h>
#include <stdio.h>
static struct termios old, new;
/* Initialize new terminal i/o settings */
void initTermios(int echo)
{
tcgetattr(0, &old); /* grab old terminal i/o settings */
new = old; /* make new settings same as old settings */
new.c_lflag &= ~ICANON; /* disable buffered i/o */
if (echo) {
new.c_lflag |= ECHO; /* set echo mode */
} else {
new.c_lflag &= ~ECHO; /* set no echo mode */
}
tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */
}
/* Restore old terminal i/o settings */
void resetTermios(void)
{
tcsetattr(0, TCSANOW, &old);
}
/* Read 1 character - echo defines echo mode */
char getch_(int echo)
{
char ch;
initTermios(echo);
ch = getchar();
resetTermios();
return ch;
}
/* Read 1 character without echo */
char getch(void)
{
return getch_(0);
}
/* Read 1 character with echo */
char getche(void)
{
return getch_(1);
}
/* Let's test it out */
int main(void) {
char c;
printf("(getche example) please type a letter: ");
c = getche();
printf("\nYou typed: %c\n", c);
printf("(getch example) please type a letter...");
c = getch();
printf("\nYou typed: %c\n", c);
return 0;
}
Copiez simplement ces fonctions et utilisez-les. J'ai trouvé cet extrait sur Google longtemps avant et je l'ai sauvegardé. Enfin, je l'ai ouvert après un long moment pour vous! Merci
char getch(){
/*#include <unistd.h> //_getch*/
/*#include <termios.h> //_getch*/
char buf=0;
struct termios old={0};
fflush(stdout);
if(tcgetattr(0, &old)<0)
perror("tcsetattr()");
old.c_lflag&=~ICANON;
old.c_lflag&=~ECHO;
old.c_cc[VMIN]=1;
old.c_cc[VTIME]=0;
if(tcsetattr(0, TCSANOW, &old)<0)
perror("tcsetattr ICANON");
if(read(0,&buf,1)<0)
perror("read()");
old.c_lflag|=ICANON;
old.c_lflag|=ECHO;
if(tcsetattr(0, TCSADRAIN, &old)<0)
perror ("tcsetattr ~ICANON");
printf("%c\n",buf);
return buf;
}
copier cette fonction et l'utiliser, n'oubliez pas l'inclus
remove the last printf if you dont want the char to be displayed
Je vous suggère d'utiliser curses.h ou ncurses.h, qui implémentent des routines de gestion du clavier, y compris getch (). Vous avez plusieurs options pour changer le comportement de getch (attendre une pression sur une touche ou non).
Il existe une fonction getch () dans la bibliothèque ncurses. Vous pouvez l'obtenir en installant le paquet ncurses-dev.
Comme indiqué ci-dessus, getch()
se trouve dans la bibliothèque ncurses
. ncurses doit être initialisé, voir i.e. getchar () renvoie la même valeur (27) pour les touches fléchées haut et bas pour cela
Vous pouvez utiliser la bibliothèque curses.h
sous Linux comme indiqué dans l'autre réponse.
Vous pouvez l'installer dans Ubuntu par:
Sudo apt-get update
Sudo apt-get installez ncurses-dev
J'ai pris la partie installation de ici .