Страница 1 из 1

Проблема в си

Добавлено: 18 дек 2005, 00:25
constab
У меня есть некая программа, в которой при нажатии определенных клавиш на клавиатуре, должны выполняться определенные действия (разные). Как узнать код нажатой клавиши?? Пытался работать с getch, но ничего не выходит :(

Добавлено: 18 дек 2005, 04:31
RST#13
1. Выполнить настройку режимов консоли с помощью ioctl
2. Открыть файловое устройство консоли на чтение
3. Считывать в цикле поступающие по мере ввода int из полученного дескриптора и декодировать.

Пример - console-tools sources, файл showkey.c
Дополнительно: man ioctl, man tcgetattr, man terminfo,
http://www.tldp.org/HOWTO/Keyboard-and- ... HOWTO.html

Если это не поможет - значит, системным программированием Вам заниматься нежелательно.


Rgds,
RST#13

Добавлено: 19 дек 2005, 05:16
constab
Неужели в linux-е так на си так сложно узнать какую кнопку(клавишу) нажал пользователь???

Даже в pascal-е это было достаточно просто, не говорю о delphi...

Суть программы заключается в том, что при нажатии клавиши ESC программа завершает работу, а при нажатии других клавиш выполняются другие функции...

Плиз помогите... Киньте исходник, вам профессионалам в си это не сложно..:(

Добавлено: 19 дек 2005, 13:38
michael

Код: Выделить всё

#include <curses.h>
int main()
{
 initscr();
 cbreak(); 
 while(getch() != 27);
 endwin();
 return 0;
}
Оно?

Добавлено: 19 дек 2005, 15:18
Silos
constab писал(а):Неужели в linux-е так на си так сложно узнать какую кнопку(клавишу) нажал пользователь???

Даже в pascal-е это было достаточно просто, не говорю о delphi...

Суть программы заключается в том, что при нажатии клавиши ESC программа завершает работу, а при нажатии других клавиш выполняются другие функции...

Плиз помогите... Киньте исходник, вам профессионалам в си это не сложно..:(
RST#13 помоему уже сказал правильный и быстрый способ.

Добавлено: 21 дек 2005, 02:38
michael
Вы что, издеваетесь? Человеку нужно просто узнать какая клавиша нажата, а вы его системным программированием посылаете заниматься.

Добавлено: 21 дек 2005, 12:40
Silos
:lol:

Добавлено: 23 дек 2005, 20:38
constab
У меня не компилируется...

Код: Выделить всё

#include <curses.h>
int main()
{
 initscr();
 cbreak(); 
 while(getch() != 27);
 endwin();
 return 0;
}
[constab@localhost cc]$ cc temp.c
temp.c:9:3: warning: no newline at end of file
/home/constab/tmp/cctNmyNP.o(.text+0x1d): In function `main':
: undefined reference to `initscr'
/home/constab/tmp/cctNmyNP.o(.text+0x22): In function `main':
: undefined reference to `cbreak'
/home/constab/tmp/cctNmyNP.o(.text+0x2b): In function `main':
: undefined reference to `stdscr'
/home/constab/tmp/cctNmyNP.o(.text+0x30): In function `main':
: undefined reference to `wgetch'
/home/constab/tmp/cctNmyNP.o(.text+0x3f): In function `main':
: undefined reference to `endwin'
collect2: ld returned 1 exit status
[constab@localhost cc]$

Добавлено: 23 дек 2005, 20:42
constab
Может нужно использовать не

Код: Выделить всё

#include <curses.h>
а что-то другое??
Приду домой, попробую поискать, какую библиотек нужно использовать...

Добавлено: 23 дек 2005, 21:01
sensor
prosto nado podklichit libi

cc -lcurses temp.c

ili tak

cc -lncurses temp.c

tochno ne znay

Добавлено: 23 дек 2005, 21:22
constab
sensor писал(а):prosto nado podklichit libi

cc -lcurses temp.c

ili tak

cc -lncurses temp.c

tochno ne znay
Все отлично скомпилировалось...
Использовал параметр -lcurses.

ВСЕМ БОЛЬШУЩЕЕ СПАСИБО!!!