cin
От: Denis Yandukin  
Дата: 07.04.03 18:31
Оценка:
Есть такой вопрос, можно ли как то узнать, пуст или нет поток ввода, т.е.
что-то типа:

std::string str;
if (cin.не_пуст)
cin >> str;

нужно для того, чтобы не блокироваться на операции ввода.
Re: cin
От: Vampire Россия  
Дата: 08.04.03 07:22
Оценка:
Здравствуйте, Denis Yandukin, Вы писали:

DY>Есть такой вопрос, можно ли как то узнать, пуст или нет поток ввода, т.е.

DY>что-то типа:

DY>std::string str;

DY>if (cin.не_пуст)
DY> cin >> str;

DY>нужно для того, чтобы не блокироваться на операции ввода.


анализируй streamsize.

Можно по другому.

std::string str, tmp;
cin >> tmp;
if (cin.good())
str = tmp;
else
Ошибка.
Если долго мучиться что нибудь получится
Re[2]: cin
От: Denis Yandukin  
Дата: 08.04.03 18:54
Оценка:
Здравствуйте, Vampire, Вы писали:

DY>Есть такой вопрос, можно ли как то узнать, пуст или нет поток ввода, т.е.

DY>что-то типа:

DY>std::string str;

DY>if (cin.не_пуст)
DY> cin >> str;

DY>нужно для того, чтобы не блокироваться на операции ввода.


V>анализируй streamsize.


На предмет чего?

V>Можно по другому.


V>std::string str, tmp;

V>cin >> tmp;

Э-ээ, как я понимаю, тут произойдет блокировка, если я не ввожу ничего?

V>if (cin.good())

V> str = tmp;
V>else
V> Ошибка.

А что показывает метод good() у cin'a?
Re[3]: cin
От: Vampire Россия  
Дата: 09.04.03 06:21
Оценка:
DY>Э-ээ, как я понимаю, тут произойдет блокировка, если я не ввожу ничего?

Если вам надо чтоб прога не ожидала ввода то:

#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char ch=0;
    string str("");
    
    while(1)
    {
        if (kbhit())
        {
            ch = getch();
            str += ch;
            cout << str;
        }
    }
    
    return 0;
}


Потоковый ввод/вывод не анализирует буфер клавиатуры на наличие символов.
Так, что придется через conio.h
Если долго мучиться что нибудь получится
Re[4]: cin
От: vvs86 Великобритания  
Дата: 09.04.03 07:46
Оценка:
V> if (kbhit())
V> {
V> ch = getch();
V> str += ch;
V> cout << str;

Pomenjaj getch() na getche i ne nado cout<<str;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.