С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
1

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

23.03.2017, 07:25. Просмотров 1999. Ответов 44

Требуется, в конце программы, сделать небольшое ожидания
для чтения того как отработала программа
Написал:
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
Ответы с готовыми решениями:

Как очистить буфер клавиатуры?
Есть меню в котором я двигаю стрелочку кнопками вверх и вниз и нажимаю ентер. ...

Как очистить поток ввода?
std::istringstream iss(s1); idd>>a; iss.clear();; s1=s3; iss>>b надо...

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

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

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

44
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
23.03.2017, 07:57 2
C++
1
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
0
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 08:12  [ТС] 3
Цитата Сообщение от eXPonent Посмотреть сообщение
Но если пользователь вводил несколько Enter-oв во время работы проги
Как в этом случае поступить?
0
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
23.03.2017, 09:07 4
Как можно подряд несколько '\n' ввести?
0
eXPonent
99 / 52 / 27
Регистрация: 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
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
23.03.2017, 14:53 6
Цитата Сообщение от eXPonent Посмотреть сообщение
Просто несколько раз натыкать
немного данных, немного Enter-ов
Где натыкать? Как натыкать?
Цитата Сообщение от eXPonent Посмотреть сообщение
у нас так препод делал, и требовал, что бы в конфе прога, показывала лог
не сустем пауз, не син гет не помогали
Покажи такой код.
0
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 14:56  [ТС] 7
Да любой код вида:
C++
1
2
3
cin >> A;
// какая-нить прога
cin.get();
Просто, после выполнения cin >> A
долбишь по клаве интенсивно и нажимая попутно Enter-ы и пробелы
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
23.03.2017, 15:01 8
Цитата Сообщение от eXPonent Посмотреть сообщение
Да любой код вида:
Тип A какой?
0
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 15:14  [ТС] 9
int, string
неважно какого типа
у меня в проге int
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
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 / 27
Регистрация: 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
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
23.03.2017, 15:28 12
Скрин ввода покажи. И код без этого (один ты знаешь, что там делается):
Цитата Сообщение от eXPonent Посмотреть сообщение
// добавил код для времени...
0
Миниатюры
Полностью очистить буфер ввода  
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
23.03.2017, 19:25  [ТС] 13
Скриншот программы не удалось сделать, так как она быстро завершилась...
успел только код сфоткать
0
Миниатюры
Полностью очистить буфер ввода  
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
23.03.2017, 19:54 14
Ты когда по клавиатуре долбишь, enter-то не нажимаешь? Потому как если ты его быстро жмешь, то пропускаешь момент, когда символы игнорятся и загружаешь туда новых переносов строки. После чего get срабатывает и программа завершается.
0
eXPonent
99 / 52 / 27
Регистрация: 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
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
23.03.2017, 21:32 16
Как можно ввести несколько '\n' подряд? Как только Enter нажат, ввод прекращается. Это какой-то побочный эффект, что ли?
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
23.03.2017, 22:13 17
Цитата Сообщение от nmcf Посмотреть сообщение
Как можно ввести несколько '\n' подряд? Как только Enter нажат, ввод прекращается. Это какой-то побочный эффект, что ли?
Он это делает, не когда ввод, а когда его TranslationsXML() работает.
0
nmcf
23.03.2017, 22:40
  #18

Не по теме:

И что? Нажатия в буфере накапливаются? В общем я не понял, что там за проблема.

0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
23.03.2017, 23:42 19
Цитата Сообщение от nmcf Посмотреть сообщение
Нажатия в буфере накапливаются?
Получается, что накапливаются. Этот код попробуй, увидишь (потыкай на Enter, пока цикл висит):
C++
1
2
3
4
5
6
7
8
9
10
    string A;
    cin >> A;
    for (int i = 0; i < 100000000; ++i)
    {
        string str("absde");
        str.clear();
    }
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "Stop" << endl;
    cin.get();
2
Mournful Max
Велосипедист...
346 / 213 / 74
Регистрация: 15.12.2015
Сообщений: 784
Завершенные тесты: 1
24.03.2017, 00:39 20
Если проблема не решилась, попробуй вместо...
Цитата Сообщение от eXPonent Посмотреть сообщение
C++
1
cin.ignore(cin.rdbuf()->in_avail())
... написать:
C++
1
cin.sync();
Насколько мне известно, этот метод очищает буфер ввода. Но я слышал, что работает не везде.
Если не поможет, стандартное решение проблемы:
C++
1
while (cin.get() != '\n');

И да, у меня тот же вопрос...
Цитата Сообщение от nmcf Посмотреть сообщение
Как можно подряд несколько '\n' ввести?
Цитата Сообщение от nmcf Посмотреть сообщение
Как можно ввести несколько '\n' подряд?
Как может остаться несколько '\n'?
0
24.03.2017, 00:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2017, 00:39

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

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

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


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

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

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