LINUX.ORG.RU

ввод из консоли

 


0

2

Привет всем девелоперам!

Чего-то не могу найти в стандартой библиотеке C++ как перехватить из консоли введенный символ без последующего «\n» (нажатия Enter). Я в курсе, что есть кроссплатформенные либы для приема сканкодов от клавы и сам использую для этого SDL2. А без внешней либы не получится?


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

Elyas ★★★★★
()

Без платформо-специфичного кода не получится.

andreyu ★★★★★
()

Если всё-таки ты хочешь того, о чём сказал Elyas, то:

#include <stdio.h>
#include <termios.h>

int main(void)
    {
    struct termios ti;
    int c;

    tcgetattr(0, &ti);
    ti.c_lflag &= ~ICANON & ~ECHO;
    tcsetattr(0, TCSANOW, &ti);

    printf("Press Ctrl-D to exit\n");

    while((c = getchar()) != 4)
        printf("Got: '%c' (%d)\n", c, c);

    ti.c_lflag |= ICANON | ECHO;
    tcsetattr(0, TCSANOW, &ti);

    return 0;
    }

cdslow ★★
()
Ответ на: комментарий от cdslow

Не могу сказать, что я хотел именно ЭТО^, но ответ я получил. Спасибо за помощь!

И я бы чуть-чуть уточнил строку

    ti.c_lflag &= ~ICANON & ~ECHO;
на вариант:
...
    ti.c_lflag &= (unsigned)(~ICANON);
    ti.c_lflag &= (unsigned)(~ECHO);
...

bigov
() автор топика
Ответ на: комментарий от CatsCantFly

потому что termios.h не является стандартной либой Плюсов. Соответственно, решения нет. Неужели не понятно? :-D

bigov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.