Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/103: Рейтинг темы: голосов - 103, средняя оценка - 4.69
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170

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

23.03.2017, 07:25. Показов 21732. Ответов 44

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

Как исправить сие проблему, от произвольного ввода
или по другому, как полностью очистить буфер ввода
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2017, 07:25
Ответы с готовыми решениями:

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

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

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

44
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 00:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Если проблема не решилась, попробуй вместо...
Сам попробовать не можешь, прежде, чем предлагать? Код для проб я выложил.
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
24.03.2017, 01:13
nd2, Точно. Заносятся символы в поток. Почему? Никогда не подумал бы, что без явного обращения к объекту cin, он будем впитывать символы.
Мои аполоджайсы

Добавлено через 42 секунды
Странно, что метод cin.sync() не съедает '\n'
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.03.2017, 01:28
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Странно, что метод cin.sync() не съедает '\n'
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Насколько мне известно, этот метод очищает буфер ввода. Но я слышал, что работает не везде.
Его работа полностью зависит от устройства потоков.
Соответственно где-то очищает, где-то нет.
Он работает в соответствии с реализацией.

Собственно, его поведение и определено
как зависящее от реализации.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 02:10
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Странно, что метод cin.sync() не съедает '\n'
В данном случае, дело не в sync(). В студии - съедает. Не жми Enter, пока код висит в цикле, и остановка, на cin.get(), будет.

Добавлено через 34 минуты
Цитата Сообщение от eXPonent Посмотреть сообщение
у нас так препод делал, и требовал, что бы в конфе прога, показывала лог
не сустем пауз, не син гет не помогали
Программа, просто мгновенно завершалась
system("pause") остановит. Только не на всех платформах есть эта "pause".
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
24.03.2017, 11:08  [ТС]
Кликните здесь для просмотра всего текста
Цитата Сообщение от nd2 Посмотреть сообщение
Этот код попробуй, увидишь (потыкай на Enter, пока цикл висит):
А где тут происходит очистка?
результат, абсолютно тот же


Кликните здесь для просмотра всего текста
Цитата Сообщение от Captain Maxee Посмотреть сообщение
cin.sync();
уже пробовал, два дня назад, не помогло

Цитата Сообщение от Captain Maxee Посмотреть сообщение
while (cin.get() != '\n');
это то же пробовал два дня назад,
валится при вводе любого символа или пробела


Кликните здесь для просмотра всего текста
Цитата Сообщение от Captain Maxee Посмотреть сообщение
И да, у меня тот же вопрос...
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Как может остаться несколько '\n'?

Цитата Сообщение от eXPonent Посмотреть сообщение
после ввода A:
465564
65465

5465
546456


65465465

54646
Прога завершилась быстроф...


Кликните здесь для просмотра всего текста
Цитата Сообщение от nd2 Посмотреть сообщение
Не жми Enter, пока код висит в цикле, и остановка, на cin.get(), будет.
Так не я жму, а препод требует, точнее требовал,
что бы были обходы ошибок, и на безумный ввод тоже
типа в поле где требуется int вводятся символы

Цитата Сообщение от nd2 Посмотреть сообщение
system("pause") остановит. Только не на всех платформах есть эта "pause".
Работает аналогично: cin.get();


Добавлено через 5 минут
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Почему? Никогда не подумал бы, что без явного обращения к объекту cin, он будем впитывать символы.
Мои аполоджайсы
обращение сохраняет cmd, она же при первом вызове cin всех их грузит в поток
нужно что то, что останавливает прогу, без непосредственного ввода
может, cin поток на этот момент как то перенести полностью в буфер обмена?
что бы все эти символы в буфере обмена остались?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 12:19
Цитата Сообщение от eXPonent Посмотреть сообщение
А где тут происходит очистка?
результат, абсолютно тот же
Это тебе разве писалось? Это nmcf писалось, чтобы он убедился, что ввод накапливается.
Цитата Сообщение от eXPonent Посмотреть сообщение
Не жми Enter, пока код висит в цикле, и остановка, на cin.get(), будет.
Это тебе разве писалось? Это Captain Maxee писалось, про работу sync() при нормальном вводе.
Цитата Сообщение от eXPonent Посмотреть сообщение
Работает аналогично: cin.get();
А про то, что system("pause") не срабатывает - сказки не рассказывай (если только у тебя не linux). Если не успеваешь увидеть остановку, то значит продолжаешь жать на клавиши, когда уже вывелось сообщение: "Для продолжения нажмите на любую клавишу".

Добавлено через 4 минуты
Цитата Сообщение от eXPonent Посмотреть сообщение
обращение сохраняет cmd, она же при первом вызове cin всех их грузит в поток
нужно что то, что останавливает прогу, без непосредственного ввода
может, cin поток на этот момент как то перенести полностью в буфер обмена?
что бы все эти символы в буфере обмена остались?
У тебя очередь событий образуется, которую нужно обрабатывать после окончания работы функции. Но это уже за рамками стандартных инструментов С++.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
24.03.2017, 13:36  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
А про то, что system("pause") не срабатывает - сказки не рассказывай (если только у тебя не linux). Если не успеваешь увидеть остановку, то значит продолжаешь жать на клавиши, когда уже вывелось сообщение: "Для продолжения нажмите на любую клавишу".
мне записать видео с работой проги?
когда вставлна сустем пауз?

даже этот код не помог:
C++
1
for(int i(0); i != 10; i++) system("pause");
Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
Если не успеваешь увидеть остановку, то значит продолжаешь жать на клавиши, когда уже вывелось сообщение: "Для продолжения нажмите на любую клавишу".
Да не жму я на клавиши, может сначало нужно протестировать, прежде чем говорить?
0
24.03.2017, 13:54

Не по теме:

Цитата Сообщение от eXPonent Посмотреть сообщение
может сначало нужно протестировать, прежде чем говорить?
В том-то и дело, что при тесте у всех работает, кроме вас.

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 14:02
eXPonent, у тебя какая среда и ОС?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 14:07
Цитата Сообщение от eXPonent Посмотреть сообщение
может сначало нужно протестировать, прежде чем говорить?
На. Как видишь, cin.get() - не останавливает, system("pause") - останавливает.
Миниатюры
Полностью очистить буфер ввода  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,428
24.03.2017, 14:15
А насчёт остановок в конце программы, то консольные программы рассчитаны на запуск из командной строки. Запускай так, и никакие остановки в конце программы не понадобятся.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
24.03.2017, 20:20  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
eXPonent, у тебя какая среда и ОС?
2010, VS, c++

Добавлено через 2 часа 7 минут
а есть какое то обращение с буфером?

Добавлено через 24 секунды
да можно cin.get() с ним связать

Добавлено через 2 часа 28 минут
может можно какие нить непечатаемые символы занести в поток cout ?

Добавлено через 17 минут
Решился вопрос такой функцией:
C++
1
for(clock_t i(clock()+100); i > clock(); cin.get());
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.03.2017, 23:21
А как ты программу завершаешь, если ожидается ввод в цикле?
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
25.03.2017, 00:25  [ТС]
нажатием Enter-a
0
25.03.2017, 14:18

Не по теме:

Сколько раз? :)

0
nd2
25.03.2017, 14:38

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Сколько раз?
Один.

0
25.03.2017, 16:35

Не по теме:

Это просто "костыль".

0
nd2
25.03.2017, 16:38

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Это просто "костыль".
Предложи не костыль.

0
25.03.2017, 16:44

Не по теме:

Уже предлагали не нажимать что попало. Можно ещё reset нажать и требовать, чтобы всё работало.

0
nd2
25.03.2017, 16:46

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Уже предлагали не нажимать что попало.
Это не то предложение. У него преподаватель такую проверку придумал. Предложи вместо его костыля, свой не костыль. Удивительно, как он ещё нашёл такой костыль.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2017, 16:46
Помогаю со студенческими работами здесь

Как очистить поток ввода
cout << "Введите ряд целых чисел произвольной длины\n"; vector<int> vecint; int sum = 0; for (int i; cin >> i; ) ...

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

Очистить буфер сокета
имеется клиент-сервер,клиент отправляет сообщение принятое std::cin и пересылает серверу,тот в свою очередь выводит его на экран,так вот в...

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru