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

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

Войти
Регистрация
Восстановить пароль
 
 
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
#1

Полностью очистить буфер ввода - C++

23.03.2017, 07:25. Просмотров 1407. Ответов 43

Требуется, в конце программы, сделать небольшое ожидания
для чтения того как отработала программа
Написал:
C++
1
2
cin.ignore(cin.rdbuf()->in_avail());
cin.get();
Но если пользователь вводил несколько Enter-oв во время работы проги
тогда cin.rdbuf()->in_avail() возвращает неверное значение, из за чего прога моментально закрывается

Как исправить сие проблему, от произвольного ввода
или по другому, как полностью очистить буфер ввода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2017, 07:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полностью очистить буфер ввода (C++):

Как очистить буфер клавиатуры? - C++
Есть меню в котором я двигаю стрелочку кнопками вверх и вниз и нажимаю ентер. while (true) { if (ti > 0) ti--; ...

Как очистить поток ввода? - C++
std::istringstream iss(s1); idd>>a; iss.clear();; s1=s3; iss>>b надо чтоб s3 в b записалось, громадное число...

Оъясните как работает консольный буфер ввода - C++
Windows поддерживает "очередь сообщений" для каждой программы, работающей в данный момент в системе Windows (значит и для консоли). Когда...

Очистить буфер функции после его обработки - C++
Добрый день. Имеется некоторое приложение написанное на Delphi Исходных кодов нет. Описаны функции которые необходимо реализовать в...

Прерывание ввода при израсходовании попыток ввода пароля - C++
Этот цикл (приведенный ниже) проверяет пароль пользователя - это слово "пароль".Для ввода пароля пользователь может сделать три...

Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? - C++
Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)? ( что только я не пробывал: то переменные...

43
GbaLog-
Любитель чаепитий
3122 / 1462 / 351
Регистрация: 24.08.2014
Сообщений: 5,175
Записей в блоге: 1
Завершенные тесты: 2
23.03.2017, 07:57 #2
C++
1
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 08:12  [ТС] #3
Цитата Сообщение от eXPonent Посмотреть сообщение
Но если пользователь вводил несколько Enter-oв во время работы проги
Как в этом случае поступить?
0
nmcf
6203 / 5514 / 1931
Регистрация: 14.04.2014
Сообщений: 23,150
23.03.2017, 09:07 #4
Как можно подряд несколько '\n' ввести?
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 14:26  [ТС] #5
Просто несколько раз натыкать
немного данных, немного Enter-ов
у нас так препод делал, и требовал, что бы в конфе прога, показывала лог
не сустем пауз, не син гет не помогали
Программа, просто мгновенно завершалась

Добавлено через 1 минуту
Цитата Сообщение от eXPonent Посмотреть сообщение
cin.ignore(cin.rdbuf()->in_avail());
может её как то через цикл прогнать?

Добавлено через 1 час 2 минуты
может как нить можно ввести:
cin >> EOF; ?
что бы потом сделать
Цитата Сообщение от GbaLog- Посмотреть сообщение
C++
1
2
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), EOF);
cin.get();
0
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,004
23.03.2017, 14:53 #6
Цитата Сообщение от eXPonent Посмотреть сообщение
Просто несколько раз натыкать
немного данных, немного Enter-ов
Где натыкать? Как натыкать?
Цитата Сообщение от eXPonent Посмотреть сообщение
у нас так препод делал, и требовал, что бы в конфе прога, показывала лог
не сустем пауз, не син гет не помогали
Покажи такой код.
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 14:56  [ТС] #7
Да любой код вида:
C++
1
2
3
cin >> A;
// какая-нить прога
cin.get();
Просто, после выполнения cin >> A
долбишь по клаве интенсивно и нажимая попутно Enter-ы и пробелы
0
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,004
23.03.2017, 15:01 #8
Цитата Сообщение от eXPonent Посмотреть сообщение
Да любой код вида:
Тип A какой?
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 15:14  [ТС] #9
int, string
неважно какого типа
у меня в проге int
0
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,004
23.03.2017, 15:18 #10
Цитата Сообщение от eXPonent Посмотреть сообщение
неважно какого типа
Это тебе на важно, а cin >> важно.
Покажи, что со string у тебя остановки нет, в таком коде:
C++
1
2
3
4
5
    string A;
    cin >> A;
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "Stop" << endl;
    cin.get();
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 15:23  [ТС] #11
Остановки нет:
C++
1
2
3
4
5
6
string A;
    cin >> A;
// добавил код для времени...
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "Stop" << endl;
    cin.get();
после ввода A:
465564
65465

5465

546456



65465465


54646

Прога завершилась быстро...
0
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,004
23.03.2017, 15:28 #12
Скрин ввода покажи. И код без этого (один ты знаешь, что там делается):
Цитата Сообщение от eXPonent Посмотреть сообщение
// добавил код для времени...
0
Миниатюры
Полностью очистить буфер ввода  
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 19:25  [ТС] #13
Скриншот программы не удалось сделать, так как она быстро завершилась...
успел только код сфоткать
0
Миниатюры
Полностью очистить буфер ввода  
GbaLog-
Любитель чаепитий
3122 / 1462 / 351
Регистрация: 24.08.2014
Сообщений: 5,175
Записей в блоге: 1
Завершенные тесты: 2
23.03.2017, 19:54 #14
Ты когда по клавиатуре долбишь, enter-то не нажимаешь? Потому как если ты его быстро жмешь, то пропускаешь момент, когда символы игнорятся и загружаешь туда новых переносов строки. После чего get срабатывает и программа завершается.
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 21:29  [ТС] #15
Нет, этот ввод делается в момент работы функции:

TranslationsXML();
и только!

Кликните здесь для просмотра всего текста
ввод:
465564
65465

5465

546456



65465465


54646


Мне что видео записать?
с отлавливанием символов ввода?
Enter-ами как раз эта про и валится
или вы думаете нас препод просто так мучал, своим вводом с клавиатуры?

Добавлено через 3 минуты
И я уже предложил как обойти эту штуку, может кто нить подскажет как это реализовать?
Цитата Сообщение от eXPonent Посмотреть сообщение
может как нить можно ввести:
cin >> EOF; ?
что бы потом сделать
C++
1
2
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), EOF);
cin.get();
или может есть ещё какой-нить непечатаемый символ, который можно занести в поток?
0
23.03.2017, 21:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 21:29
Привет! Вот еще темы с ответами:

Как очистить буфер..? - VBA
Извините, за вопрос из облатси VBA, но там в конфе глухо, да и проблема не только VBA'шная... Вчера я спросил о включении NumLock, не...

Очистить буфер Activity - Программирование Android
Как очистить буфер Activity?

Очистить буфер обмена - Delphi FireMonkey
Подскажите как очистить буфер обмена на XE5 андроид. В VCL было ClipBrd,а тут не могу найти.

Как очистить буфер обмена? - VBA
вот собственно и весь вопрос Заранее спасибо


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

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

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