Я пытаюсь использовать getche () в Linux над GCC на терминале - PullRequest
0 голосов
/ 25 июня 2011

Мне нужно знать, как скомпилировать программу на C с помощью функции getche (), но она не компилируется, потому что для этого нужна ссылка. Кто-нибудь знает, какая ссылка отсутствует?

я использую эту команду:

gcc filename.c -o exec

Ответы [ 2 ]

3 голосов
/ 25 июня 2011

Для Linux и других платформ Unix вы, вероятно, захотите использовать ncurses вместо простой попытки эмулировать getch [e].Это немного более сложный API, но он позаботится о всех хитростях для вас, чего не может сделать простая эмуляция, опубликованная Дэном Д.(Например, он поступает правильно, если пользователь вводит ^ C или ^ Z .)

2 голосов
/ 25 июня 2011

С http://wesley.vidiqatch.org/code-snippets/alternative-for-getch-and-getche-on-linux/

/*
    getch() and getche() functionality for UNIX,
    based on termios (terminal handling functions)

    This code snippet was written by Wesley Stessens (wesley@ubuntu.com)
    It is released in the Public Domain.
*/

#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 */
    new.c_lflag &= echo ? ECHO : ~ECHO; /* set 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...