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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
14.02.2013, 18:39     Очистка буфера клавиатуры #1
Добрый день.
Начал писать тетрис. Возникла проблема с обработкой нажатий клавиш. Если часто нажимать на клавиши, то определенные действия выполняются и посте того, как перестал нажимать.
Погуглил, попробовал функцию 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();
}
Правда не совсем понимаю как оно работает... Наверное должно перебрать весь буфер. Но не знаю, не отсеет ли "нужные" нажатия клавиш?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 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
 Аватар для iama
1249 / 974 / 48
Регистрация: 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
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
14.02.2013, 19:01     Очистка буфера клавиатуры #6
Kgfq, я не говорю, что это бесполезно, я только говорю, что это не продуктивно.
Yandex
Объявления
14.02.2013, 19:01     Очистка буфера клавиатуры
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru