Как в Си++ обрабатывать события нажатия на стрелку?

  • Автор темы Nek
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nek

Гость
#1
Всем привет. Вот у меня тут проблема небольшая возникла. Сейчас делаю курсовую по Си++ и кое чего не знаю. Вот собственно то, чего я не знаю:
Мне надо, чтобы у меня в программе при нажатии стрелки выполнялось какое либо действие. Ну типа там я нажимаю стрелку вниз, и, к примеру, каретка сползает на 2 строки вниз(как два раза нажать Enter :rolleyes: ). Так вот не знаю как это реализовать. Буду очень благодарен, если кто либо даст мне ответ на этот вопрос. Желательно, чтобы кто-нибудь дал пример.
И вот еще что, программу эту я делаю в Borland 3.11 for DOS, т.к. этого требует преподаватель, т.е. в консольном виде.
Еще раз спасибо за внимание :blink:
 

vital

Больной Компом Детектед
29.01.2006
2 432
42
#2
Ну так все просто. В вашей программе постоянно ожидаете ввода символа, пототм проверяете if getch=ASCII код стрелки{делаете то что нужно} Код стрелки - 28(Hex). Больше подсказывать нечего=)
 
N

Nek

Гость
#3
vital
Спасибо, конечно. Но я не уверен что этот ответ правильный. Я взял функцию getch() и немного поэкспериментировал. Вот моя программа

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
main()
{
clrscr();
int flag=1, r;
while(flag)
{
r=getch();
cout << "\n cod simvola = " <<r;
if(r==0x1b)
flag=0;

}
return 0;

}


Эта программа выводит код вводимого символа, а при нажатие 'ESK' заканчивает программу. Так вот и возникает проблема, что при вводе стрелки получается код 72, 75, 78 или 80 и еще ноль строкой выше. А эти символы как известно большие буквы английского алфавита. Так что я прошу вернуться к моему вопросу и дать какой нибудь другой ответ.

С уважением, Артем.
 

Гость
#4
Функциональные клавиши при нажатии дают два кода, первый ноль, второй - код. Ноль возвращают только спецклавиши.
Итого обработка
r=getch();
if(r==0)
{
r=getch();
[и здесь ваша обработка нажатия]
}
 
N

Nek

Гость
#5
АлександрРостовский
Спасибо, конечно, но я уже решил эту проблему :)
 
Статус
Закрыто для дальнейших ответов.