Интерактивный ввод в консоли

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Интерактивный ввод в консоли

Сообщение BratSinot »

Доброго времени суток!

Как в консоли устроить интерактивный ввод? Т.е. без надобности переходить на новую строку, т.е. нажимать Enter. Просто нажал символ и он считался.
Спасибо сказали:
Lan4
Сообщения: 339
Статус: hikki
ОС: Arch

Re: Интерактивный ввод в консоли

Сообщение Lan4 »

на каком языке?
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Интерактивный ввод в консоли

Сообщение BIgAndy »

BratSinot писал(а):
25.01.2011 20:55
Как в консоли устроить интерактивный ввод? Т.е. без надобности переходить на новую строку, т.е. нажимать Enter. Просто нажал символ и он считался.

то, что вы описали как раз является неинтерактивным вводом.
И ещё. С чем связана необходимость такого, с позволения сказать, хитроподвыпернутого поведения?

P.S. Можно в bash небольшой скриптик наваять.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Интерактивный ввод в консоли

Сообщение BratSinot »

Извините, совсем забыл про остальные языки =) В C89-99.

BIgAndy писал(а):
25.01.2011 21:34
то, что вы описали как раз является неинтерактивным вводом.

Ну честно говоря я незнаю как это называется.

И ещё. С чем связана необходимость такого, с позволения сказать, хитроподвыпернутого поведения?

Ну скажем калькулятор.

И да, желательно на чистом C, curses меня не прельщает.
Спасибо сказали:
Lan4
Сообщения: 339
Статус: hikki
ОС: Arch

Re: Интерактивный ввод в консоли

Сообщение Lan4 »

если на С, то можно сделать с помощью функции getchar()

хотя нет, эта функция как раз требует нажатия enter, а вот getch() - то, что надо, вот только эха нету, но это исправимо.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Интерактивный ввод в консоли

Сообщение BratSinot »

Lan4 писал(а):
25.01.2011 22:32
если на С, то можно сделать с помощью функции getchar()

хотя нет, эта функция как раз требует нажатия enter, а вот getch() - то, что надо, вот только эха нету, но это исправимо.

Мне кажется, или она не стандартная? По крайней мере в Google.com ничего найти не могу, а справочник сейчас далеко.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Интерактивный ввод в консоли

Сообщение NickLion »

getch() - это ncurses или виндосовская из conio.h (в поставке от MS и Borland такое).
Спасибо сказали:
Lan4
Сообщения: 339
Статус: hikki
ОС: Arch

Re: Интерактивный ввод в консоли

Сообщение Lan4 »

NickLion писал(а):
25.01.2011 23:14
getch() - это ncurses или виндосовская из conio.h (в поставке от MS и Borland такое).

упс... сфейлился(


вот тут:

http://www.cyberforum.ru/cpp-linux/thread1...html#post931906

есть что-то по поводу считывания иp терминала не в построчном, а в посимвольном режиме
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Интерактивный ввод в консоли

Сообщение eddy »

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

unsigned char read_console(){ // считываем данные с консоли
        unsigned char rb;
        struct timeval tv;
        int retval;
        tcgetattr( STDIN_FILENO, &oldt ); // открываем терминал для реакции на клавиши без эх
а
        newt = oldt;
        newt.c_lflag &= ~( ICANON | ECHO );
        tcsetattr( STDIN_FILENO, TCSANOW, &newt );
        fd_set rfds;
        FD_ZERO(&rfds);
        FD_SET(STDIN_FILENO, &rfds); // 0 - стандартный вход
        tv.tv_sec = 0; tv.tv_usec = 10000; // ждем 0.01с
        retval = select(1, &rfds, NULL, NULL, &tv);
        if (!retval) rb = 0;
        else {
                if(FD_ISSET(STDIN_FILENO, &rfds)) rb = getchar();
                else rb = 0;
        }
        tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
        return rb;
}
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали: