Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: Konstantine on February 14, 2008, 22:49:39

Title: Вопросс по поводу библиотеки conio.h в Си
Post by: Konstantine on February 14, 2008, 22:49:39
Ребят у меня такая проблема сижу пишу программочку прорисовки текстового меню, использую ESC последовательности, ну так вот я хочу функцией getch() ловить все нажатия клавиш с клавиатуры т.к. функции scanf, getc, getchar работают только после нажатия клавиши ENTER, тобишь с их помощью можно строки сразу закидывать в буфер разом, это канешно круто, но в моём случае мне нужно чтобы я пользовался стрейфами и курсор бегал по меню и только когда мне нужно зайти в под меню я жал ENTER.

Так самое смешное, то что я не могу подключить библиотеку #include <conio.h> в которой находиться функция getch(), потому что так таковой у меня нету ВООБЩЕ НА ВСЁМ КОМПЕ Я УЖЕ ПРОВЕРИЛ, я и через синоптик пытался её найти (я в ALT Linux`е работаю), и apt-get`ом пробовал ничё не помогает.

Я уже Яндекс за дро..... в пойсках альтернативной функции которая бы сразу считывала код нажатой клавиши... 23метра внешки за день причём не скачивал ни чего просто читал ссылки....  

Ребят я сделал по моему всё что я знал, если кто знает, что ещё можно сделать или какая есть альтернативная функция помогите пожалуйста...

Заранее спасибо ваш Константин.
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: demiurg on February 14, 2008, 23:59:29
Quote from: Konstantine
Я уже Яндекс за дро..... в пойсках альтернативной функции которая бы сразу считывала код нажатой клавиши... 23метра внешки за день причём не скачивал ни чего просто читал ссылки....  

Ребят я сделал по моему всё что я знал, если кто знает, что ещё можно сделать или какая есть альтернативная функция помогите пожалуйста...
Ну так вместо того чтобы дрочить у Яндекса используйте гугль http://www.google.ru/search?q=conio.h (http://www.google.ru/search?q=conio.h)
http://en.wikipedia.org/wiki/Conio.h (http://en.wikipedia.org/wiki/Conio.h)

в общем пользуйте curses или ncurses.
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: Konstantine on February 15, 2008, 00:35:20
Quote from: demiurg
Ну так вместо того чтобы дрочить у Яндекса используйте гугль http://www.google.ru/search?q=conio.h (http://www.google.ru/search?q=conio.h)
http://en.wikipedia.org/wiki/Conio.h (http://en.wikipedia.org/wiki/Conio.h)

в общем пользуйте curses или ncurses.

Кстати я с ncurses ещё три дня назад столкнулся думал решить проблему так через Синоптик я нашёл пакет ncurses и поставил их, но gcc компиль всеравно не нашёл ncurses у меня в библиотеках.


И как я ща почитал в ncurses нет функции getch() или getch()
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: demiurg on February 15, 2008, 00:46:25
Quote from: Konstantine
Кстати я с ncurses ещё три дня назад столкнулся думал решить проблему так через Синоптик я нашёл пакет ncurses и поставил их, но gcc компиль всеравно не нашёл ncurses у меня в библиотеках.
Подозреваю, что Вы ncurses-devel не поставили, потому компилятор и не может найти заголовочных файлов.
Quote from: Konstantine
И как я ща почитал в ncurses нет функции getch() или getch()
Ну так Вы читать умеете?
conio.h is a header file used in old MS-DOS compilers to create TUI interfaces....Most C compilers that target UNIX and Linux do not have this header and do not supply the concomitant library functions. Вы еще пожалуйтесь что в линуксе нет хидеров для WinAPI...
Вы похоже используете какую-то очень древнюю книжку по написанию приложений для MS-DOS.
См. например, http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html (http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html)
Code: [Select]
#include <ncurses.h>

int main()
{    
    initscr();            /* Start curses mode           */
    printw("Hello World !!!");    /* Print Hello World          */
    refresh();            /* Print it on to the real screen */
    getch();            /* Wait for user input */
    endwin();            /* End curses mode          */

    return 0;
}
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: Konstantine on February 15, 2008, 01:05:58
спасибо большое ток я не книжку использую я вообще ни чё не использую линух неделю назад токо поставил вот и разбираюсь чё к чему ....

и кстати щас через синоптик переустановил ncurses попробовалсклмпилить всё заработало )))

токо что то не так как надо работает представляешь программа не ждёт нажатия клавиши а сама её жмёт я уже проверочку вставил:

//#include <conio.h>
#include <stdio.h>
#include <curses.h>

void menucolor   (int attr, int fg, int bg);
void menu   (int kyrsor);
void PKursor   (char *pozich);

int main()
{   int kyrsor=0,ESC,c,i;
   char command[13];
   
   PKursor(H);
   menu (0);

   for(i=0;i<10;i++)
       {
      c=getch();
      printf("getch() =%d\n",c);
       }
return 0;
}

и выводит он мне:

getch() =-1
getch() =-1
getch() =-1
getch() =-1
getch() =-1
getch() =-1
getch() =-1
getch() =-1
getch() =-1


может в этой библиотеке getch() не int значение возвращает или как а ?
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: Konstantine on February 15, 2008, 01:21:21
блин обидно.....

И проблему так и не решил, и подруга уже заснула ... заждалась....

какгриться за двумя зайцами погонишься от обоих и отхватишь...
Title: Вопросс по поводу библиотеки conio.h в Си
Post by: demiurg on February 15, 2008, 01:31:42
Quote from: Konstantine
блин обидно.....

И проблему так и не решил, и подруга уже заснула ... заждалась....

какгриться за двумя зайцами погонишься от обоих и отхватишь...
Вы документацию уже начните читать!
Code: [Select]
#include <stdio.h>
#include <curses.h>
int main()
{
  int i;
  char c;
  initscr();
  for (i=0; i<10; i++)
  {
    c = getch();
    printw("\ngetch() =%d\n",c);
    refresh();
  }
  endwin();
  return 0;
}
P.S. Пример работает, при том, что я ncurses вижу в первый раз, а Цэ во второй.....