LINUX.ORG.RU

std::cin


0

0

Можно ли в std::cin отключить буферизацию, т.е. чтобы

char c;

std::cin>>c;

сразу выходил, а не ждал \n?

anonymous

Ответ на: Re: std::cin от Onanim

Re: std::cin

#include <iostream>

using std::cin;
using std::cout;

int main()
{
	char c;
	cin.rdbuf()->pubsetbuf(0, 0);
	cin>>c;
	return 0;
}

Не работает.

anonymous ()

Re: std::cin

А, я чота сразу не врубился. Я так понимаю, что у тебя cin - это
терминал, и ты хочешь, чтобы как тока ты на клавиатуре кнопочку
нажал - она сразу из cin в программе прочиталась. Так?

Если так, то буферизация тут не виновата. Тебе надо терминал в
non-canonical mode переключать (и я не знаю, как это будет
работать вместе с C++ стримами).

Для начала прочитай из Unix Programming FAQ
http://www.erlenstar.demon.co.uk/unix/faq_toc.html
вопрос
3.2 How can I read single characters from the terminal?

(альтернативный вариант - использовать ncurses, однако для считывания
символа ncurses - явный перебор)

HTH

Onanim ()
Ответ на: Re: std::cin от Onanim

Re: std::cin

Спасибо. Вопрос мне задал другой человек. Он работает под виндами. Неужели в С++ нет кроссплатформенного способа? Я даже ему сказал самому поискать(типа учись), а теперь понял, что не все так просто.

anonymous ()

Re: std::cin

Вобще тут не причем буферизация и в данном случае он выйдет сразу после ввода одного символа, не понимаю в чем проблема.

p_kolya ()
Ответ на: Re: std::cin от p_kolya

Re: std::cin

> Вобще тут не причем буферизация...

Действительно - буферизация тут рядом не валялась ;-)

> ...и в данном случае он выйдет сразу после ввода одного символа, не
> понимаю в чем проблема.

Да, если cin связан с файлом - вернется сразу. Если же cin связан
с терминалом, находящимся в canonical mode - будет ждать, пока
ты не нажмешь Enter.

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