Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
#1

Очистка буфера клавиатуры - C++

14.02.2013, 18:39. Просмотров 2104. Ответов 5
Метки нет (Все метки)

Добрый день.
Начал писать тетрис. Возникла проблема с обработкой нажатий клавиш. Если часто нажимать на клавиши, то определенные действия выполняются и посте того, как перестал нажимать.
Погуглил, попробовал функцию fflush(stdin) но это проблему не решило. Как полностью очистить буфер?
Вся программа уже довольно большая, поэтому выложу только проблемное место:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
for (;;)
    {
        int shape=rand()%(7);
        int shape_position=rand()%(4);
        int position_x=4;
 
        for (int position_y=0;position_y<25;position_y++)
        {
            fflush(stdin);
            if (_kbhit())
            {
                int get=_getch();
                fflush(stdin);
                if (get==32)
                {
                    shape_position++;
                }
                if (shape_position==4)
                {
                    shape_position=0;
                }
            }
            int error=move_down(map,shapes,shape,shape_position,position_y,position_x);
            if (error==1)
            {
                lay(map);
                break;
            }
            if (position_y==24)
            {
                lay(map);
            }
            system("cls");
            fill(map);
            Sleep(200);
        }
        
        
 
 
        if (_kbhit())
            break;
    }
Добавлено через 40 минут
Возникла идея вместо:
C++
1
2
3
4
if (_kbhit())
{
    get=_getch();
}
написать:
C++
1
2
3
4
while(_kbhit())
{
    get=_getch();
}
Правда не совсем понимаю как оно работает... Наверное должно перебрать весь буфер. Но не знаю, не отсеет ли "нужные" нажатия клавиш?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2013, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очистка буфера клавиатуры (C++):

Очистка буфера клавиатуры - КАК? - C++
Как очистить буфер клавиатуры? Думал как-то так std::cin.seekg(0, ios::end); но выдаёт ошибку main.cpp|59|error: 'ios' has not...

Очистка буфера! - C++
У меня трабл! В масив записывает непонятное значение!!! Хотя должно запрашывать пользователя!!! Я все проверял!!! Но прошу помочь! Как...

Очистка буфера kbhit() - C++
Доброго времени суток! Вопрос в следующем. Как очистить буфер функции kbhit? Код такого рода: while (exit==0) { if...

Очистка буфера потока - C++
И снова здравствуйте, возникла снова проблема теперь уже иного рода. Есть код который заносит в поток значение: strm &lt;&lt;...

Очистка всего буфера ввода (cin) - C++
Предположим у нас есть клиентское приложение, которое ожидает сообщение от сервера. При получении этого сообщения клиент должен отправить...

Запись в файл, очистка буфера ввода - C++
Есть программа записи в файл некоторой информации; фио студента, оценка за экзамен и т.д. Подскажите пожалуйста, почему в консоли...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 18:43 #2
А зачем писать такое консольным приложением?
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
14.02.2013, 18:44  [ТС] #3
Цитата Сообщение от iama Посмотреть сообщение
А зачем писать такое консольным приложением?
потому что пока умею программировать только в консоли
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 18:49 #4
fuelcs, такое намного удобнее писать оконным приложением, просто вы сейчас зря тратите время.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.02.2013, 18:58 #5
fuelcs, советую погуглить в сторону GetAsyncKeyState

Добавлено через 14 секунд
iama, для обучения бывает полезно и это
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 19:01 #6
Kgfq, я не говорю, что это бесполезно, я только говорю, что это не продуктивно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 19:01
Привет! Вот еще темы с ответами:

Очистка буфера ввода при работе с cin - C++
Добрый вечер! Пытаюсь научиться работать с классами, подскажите пожалуйста, что я делаю не так. В частности не работает функция enter,...

Простая программа работы с классами и строками, очистка буфера - C++
суть такова: создать класс содержащий почтовый адрес организации. предусмотреть возможность раздельного изменения/вывода составных частей...

Проверка буфера клавиатуры - C++
Здравствуйте! Я читаю с клавиатуры cin'ом. Как мне проверить, что в буфере еще есть данные?

Анализ буфера клавиатуры нестандартным методом - C++
Здравствуйте! Ребята, подскажите, не знаю откуда копать и куда. Есть задача: . Буду писать или на С++ или на С#. Но я ума не приложу как...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.02.2013, 19:01
Ответ Создать тему
Опции темы

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