Страница 1 из 1

iostream

Добавлено: 25 июл 2004, 23:43
bizon
как на с++ написать что-то вроде
istream &operator(istream&,char&);
чтоб с cin вводило все сразу без буферизации?

на с выглядит так:

#include <stdio.h>
#include <fcntl.h>
#include <termio.h>
char ReadKey(void)
{
struct termio port; //это чтоб управлять терминалом
struct termio save; //это чтоб потом восстановить то че испортили
char key;
ioctl(0,TCGETA,&save); //получ. текущие установки терминала
port=save;
port.c_lflag=0; //чтоб не ждал /n
//если этот флаг установлен в ненулевое значение то при нажатии
//любой клавиши она сравнивается с управляющей и если совпадает
//то вызывается сигнал.
//а если сигнала нет то read и не ждет /n
ioctl(0,TCSETAW,&port); //устанавливаем свои параметры терминала
read(0, &key, 1);
ioctl(0,TCSETAW,&save);//восстанавливаем старые установки
return key;
}

Добавлено: 26 июл 2004, 13:38
Kornilov Matwey
Русским языком, тебе нужно cin без буферизации? Это решается средствами STL, описано в Страуструпе в разделе про Потоки.

Добавлено: 27 июл 2004, 15:42
bizon
Kornilov Matwey писал(а):Русским языком, тебе нужно cin без буферизации? Это решается средствами STL, описано в Страуструпе в разделе про Потоки.

да, это мне и нужно.
если Вам не сложно напиши поподробнее как это делается либо дай линк на данную книгу на русском.

Добавлено: 27 июл 2004, 17:48
Kornilov Matwey
Ничего более конкретного сказать не могу :( сам никогда не делал.
Книга называется Язык Программирования C++, специальное издание, автор Бьерн Страуструм, из-во БИНОМ.

Действовать нужно через буфер std::streambuf прикрученный к std::cin.
Несколько цитат...
"Синхронизация потока istream и буфера осуществляется при помощи sync()"
"Функция readsome() является операицей нижнего уровня, которая позволяет посмотреть, есть ли в потоке символы для чтения. Это может очень пригодиться, когда нежелательно ждать ввода, например с клавиатуры."
"Вызов in_avail() используется для того, чтобы посмотреть, сколько доступных символов в буфре. Это может пригодиться, чтобы не ждать ввода."