Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
wikikino
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 15
#1

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

23.02.2013, 12:02. Просмотров 636. Ответов 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
Ответы с готовыми решениями:

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

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

Как освободить память?
подскажите как правильно освободить память,спасибо заранее))) #include...

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

Как правильно освободить память
Есть функция char* md5(const char*). Как освободить память выделенную ею?...

8
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,659
Записей в блоге: 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
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 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
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,659
Записей в блоге: 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
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,659
Записей в блоге: 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

Как освободить память быстро?
Функция malloc неправильно работает...Заполняется память быстро,а очищается...

Как правильно освободить память
Написал вот такой костыль: wchar_t* getDate() { time_t seconds =...

Как правильно освободить память
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под...


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

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

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