Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема c getch()


Автор: Sadness 2.12.2008, 01:23
Всем привет smile

Делаю не сложное меню в консольном приложении , и столкнулся со следующей проблемой:

Код

int m_mov = getch();
switch(m_mov)
{
    case 38:
           // ...
         break;
   case 40:
          // ...
         break;
}


программа никак не реагирует на нажатие стрелок (и много еще на какие smile), хотя с цифровыми кнопками работает нормально.
Что я делаю не так подскажите пожалуйста smile

Автор: ne_tru_e 2.12.2008, 01:31
А ты после строки с getch() напиши printf("%d",m_mov);
То есть проверь что оно получает при нажатии на стрелки.

Автор: Sadness 2.12.2008, 01:52
Странно smile
получаю 224, причем для всех 4-х стрелок.

Автор: vinter 2.12.2008, 08:02
Sadness, если я ничего не путаю,стрелки это управляющие клавиши, у них надо обрабатывать второй байт. Это делается через kbhit+getch. Я выкладывал исходник работы клавиатуры в ДОСе, поищи, по моему нику в темах. Если не найдешь я вечером выложу(если не забуду smile) 

Автор: Sadness 2.12.2008, 16:01
2 vinter:
Нашел эту тему, спасибо smile

http://forum.vingrad.ru/forum/topic-10514/unread-1/hl/case/index.html

Автор: ne_tru_e 2.12.2008, 16:23
Я додумался и сам, но считал что было и другое решение. А зря.
Далеко ходить не нужно, в принципе там то же самое.

Код

int m_mov = getch();
if( m_mov==224)
  switch( getch() )
  {
      case 72:// вверх
           //...
           break;
      case 75:// влево
           //...
           break;
      case 77:// вправо
           //...
           break;
      case 80:// вниз
           //...
           break;
  }


То есть мы просто второй раз вызываем getch().

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)