Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
#1

Как освободить состояние потока ? - C++

23.02.2013, 12:02. Просмотров 617. Ответов 8
Метки нет (Все метки)

Здравствуйте. Нужна помощь. Вот небольшая часть моей программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
int nr_block;
    while (true)
    if (cin>>nr_block,cin.good())
    {
        cout<<"It's OK "<<'\n';
        break;
    }
    else
    {
        cout<<"Attention, you need to enter an int expression. Try again. "<<'\n';
        cin.good() Не знаю что тут писать;
        }
Я ввожу значения до тех пора, пока не ввел значение типа "int", тогда значение cin.good() = true я пишу, что все ОК и выхожу. Если я ввел другое значение (например буквы), то программа заходит в else и выдает предупреждение. В этом else я должен потоку дать рабочее состояние и вновь вводить значения. Как это сделать ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 12:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как освободить состояние потока ? (C++):

Как определить состояние SUSPENDED потока? - C++
Один способ вроде как знаю, но он мне не нравится: Вызвать SuspendThread которая вернёт предыдущее значение счётчика...

Состояние файлового потока - C++
.... fostream log; .... class A { public: A (); }; A::A() {

Как освободить память? - C++
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

как освободить память? - C++
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет...

Как правильно освободить память - C++
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt; char* md5(const char* text) { ...

Как правильно освободить память - C++
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

8
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,610
Записей в блоге: 12
23.02.2013, 12:15 #2
C++
1
2
cin.flush(); // очистить поток
continue; // начать цикл while заново
0
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
23.02.2013, 12:18  [ТС] #3
Цитата Сообщение от Van111 Посмотреть сообщение
C++
1
2
cin.flush(); // очистить поток
continue; // начать цикл while заново
Спасибо. А какой файл я должен подключить, что считать cin.flush() ? #include что ?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.02.2013, 12:48 #4
Цитата Сообщение от wikikino Посмотреть сообщение
#include что ?
iostream
0
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
23.02.2013, 12:53  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
iostream
выдает ошибку. error C2039: flsuh не является членом "std::basic_stream<_Elem,_Traits>
0
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,610
Записей в блоге: 12
23.02.2013, 13:01 #6
wikikino, будте проворливей
C++
1
   std::cin.clear();
1
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
23.02.2013, 13:09  [ТС] #7
Программа зацикливается в else и все время выдает предупреждение. Поток, видимо, так и не очищается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int nr_block;
    while (true)
    if (cin>>nr_block,cin.good())
    {
        cout<<"It's OK "<<'\n';
        break;
    }
    else
    {
        cout<<"Attention, you need to enter an int expression. Try again. "<<'\n';
        std::cin.clear(); // очищает состояние потока, тем самым позволяя еще раз ввести значение
        continue;
    }
0
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,610
Записей в блоге: 12
23.02.2013, 13:20 #8
wikikino, будте проворливей

C++
1
2
        std::cin.clear(); // очищает состояние потока, тем самым позволяя еще раз ввести значение
        std::cin.sync();
Добавлено через 34 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main ()
{
 
int nr_block;
while (true)
{
 
    
    if ( cin >>nr_block)
    {
        cout<<"It's OK "<<'\n';
        
    }
    else
    {
        cout<<"Attention, you need to enter an int expression. Try again. "<<'\n';
        std::cin.clear(); // очищает состояние потока, тем самым позволяя еще раз ввести значение
        std::cin.sync();
        continue;
    }
 
    
 
}
    return 0;
}
0
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
23.02.2013, 13:59  [ТС] #9
Все работает =) Большое спасибо =)
0
23.02.2013, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 13:59
Привет! Вот еще темы с ответами:

Как освободить память быстро? - C++
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как правильно освободить память - C++
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В мейне делаю все необходимые мне...

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru