С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/120: Рейтинг темы: голосов - 120, средняя оценка - 4.53
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
1

_kbhit() - описание

13.11.2017, 12:39. Показов 23215. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, может кто-нибудь помочь с моим кодом? Использую функцию _kbhit() - знаю, что если нажата клавиша, то она выдает true, и наоборот. Но вот в моем случае у меня вопрос. Вот код:
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
if(_kbhit())
    {
 
        switch(getch())
        {
        case 'w':
            {
                dir=UP;
                break;
            }
        case 'a':
            {
                dir=LEFT;
                break;
            }
        case 's':
            {
                dir=DOWN;
                break;
            }
        case 'd':
            {
                dir=RIGHT;
                break;
            }
        case 'x':
            {
                dir=NODIR;
                break;
            }
        }
    }
Как бы если нажата клавиша, то считываю пользовательский ввод. Но вопрос в том, ведь после нажатия клавиша у меня _kbhit() пропускает дальше к switch(getch()). Тут по идее он должен еще раз у меня запрос взять на ввод. Но в моей программе после одного нажатия, сразу продолжается все, и как будто getch() берет значение из нажатой до _kbhit() функции - не знаю как объяснить правильнее... вот архив с проектом:Snake.rar
Вот ехе-шник на Drive.Google - https://drive.google.com/open?... w4wiTcf_ho
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2017, 12:39
Ответы с готовыми решениями:

kbhit
Привет всем. kbhit() умеет различать какая клавиша нажата? или для этого уже что то нужно посложнее?

Аналог kbhit
Подскажите пожалуйста, какую функцию необходимо использовать в С++, чтобы прога поняла, что нажата...

Kbhit() - не определяется
Подпараграф "Вариация на тему цикла for" из книги Шилдта "C++ Базовый курс" предлагает вот такой...

Функция kbhit
как сделать чтобы функция kbhit реагировала не на любую нажатую клавишу, а только на определенную?

6
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.11.2017, 12:58 2
kbhit() определяет, было ли нажатие, а getch() извлекает. Что не ясно?
0
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
13.11.2017, 13:25 3
Попробуйте такой код - что выведет?
C++
1
2
3
4
if(_kbhit()){
  char ch = getch();
  std::cout<<ch<<"\n";
}else std::cout<<"--\n";
0
Модератор
Эксперт С++
13721 / 10918 / 6478
Регистрация: 18.12.2011
Сообщений: 29,147
13.11.2017, 13:29 4
Цитата Сообщение от Abomination_25 Посмотреть сообщение
switch(getch())
Можете расписать
C++
1
2
3
char c;
c=getch();
switch(c)
0
4 / 4 / 0
Регистрация: 13.12.2016
Сообщений: 246
13.11.2017, 23:37  [ТС] 5
Я к тому - сначала ведь происходит проверка на нажатие -а потом должен быть запрос на ввод от getch();
А у меня в программе getch() получает как-будто нажатие, которое было нажато до проверки _kbhit();
Поэтому меня это смутило. Код-то работает, просто сейчас задумался - а почему так?

Тут вопрос главный в том: Я вот жму клавишу - _kbhit() Выдает true - иду дальше, getch() - не высылает запрос, он берет нажатие от _kbhit() - так ли это или как происходит всё?

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    char ch;
    do{
    if(_kbhit()){
        ch = getch();
        cout<<ch<<" ";
    }
    }while(ch!='x');
 
    return 0;
}
Такой код дал понять, что срабатывает истина при нажатии + одновременно записывается в getch();
Интересно почему, просто запомню
Можно закрывать
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.11.2017, 10:12 6
Цитата Сообщение от Abomination_25 Посмотреть сообщение
не высылает запрос
Какой запрос? kbhit() просто сообщает было ли нажатие, но не извлекает символ. Там буфер.
0
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,442
14.11.2017, 10:42 7
kbhit проверяет не пуст ли буфер клавиатуры, не меняя его
getch берет из буфера последний символ (если буфер пуст - ждет пока там хоть что-то не появится)
2
14.11.2017, 10:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2017, 10:42
Помогаю со студенческими работами здесь

Ошибка kbhit()
Добрый день, подскажите пожалуйста. При сборке программы выдаёт такую ошибку Ошибка 1 error...

Очистка буфера kbhit()
Доброго времени суток! Вопрос в следующем. Как очистить буфер функции kbhit? Код такого рода:...

альтернатива kbhit() и getch
А кто подскажет,чем можно заменить kbhit() and getch в коде. Компилятор выдает ошибку,т.к. данные...

Работа с while, kbhit() и getch()
Здравствуйте! Подскажите пожалуйста, Задача, сделать точку в консоли, которая бы двигалась в...

немогу разобратся с kbhit()
научите как kbhit() юзать? borland 3.1 если на пробел нажимаю(32) вроде нормально выполняет.. а...

Подскажите с функцией kbhit()
Подскажите как сделать что-бы функция kbhit() реагировала на нажатие определенной клавиши, например...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru