Буферизация ввода в C/C++

kokoc88

Есть ли возможность заставить консоль отдавать напечатанный символ сразу, не дожидаясь нажатия Enter'а? Так, чтобы
char c;
cin >> c;
возвращалось сразу же после нажатия любой клавиши.

1234554321

да, конечно, можно очистить буфер с помощью flush;

shlyumper

setvbuf вообще говоря, но AFAIR на stdin это дело не распростроняется :-)

kokoc88

Причём тут flush ? Это вообще для ostream. Я же спрашиваю про ввод.

kokoc88

Не распространяется.

1234554321

угу, тогда readsome;

Ivan8209

getche?
Keywords: echo
---
...Я работаю...

stream2008

Можно воспользоваться функцией getc вместо считывания из потока...

kokoc88

readsome не будет работать с cin.
getch использует консольную буферизацию.
getche - это всё-таки виндовая (даже досовская) реализация, она вызывает SetConsoleMode. Есть ли что-то стандартное?

Ivan8209

Ни Си, ни Си++ не описывают рабочее окружение, поэтому стандарта нет.
Так что смотри, для чего ты пишешь.
Есть ``/dev/tty?'', ``/dev/console'', ``getch'', ``getche'' и т.д.
---
...Я работаю...

abrek

> setvbuf вообще говоря, но AFAIR на stdin это дело не распростроняется
кто сказал?
другое дело, что это не влияет на буферизацию в терминале
в unix-like нужно переводить терминал в неканонический режим, чтоб от неё избавиться
для DOS и Windows тут тоже что-то написали
Оставить комментарий
Имя или ник:
Комментарий: