Другие языки программирования и технологии

Вроде бы простенькая задача С++. Выручайте, не знаю как реализовать.

Есть лабиринт.
Передвижение по нему осуществляется с помощью стрелок клавиатуры, а выход из программы с помощью русской буквы "р". (менять нельзя)
Так вот, возник вопрос, как можно узнать, какую именно клавишу нажал пользователь?

Для реализации использовал функцию _getch(). Но помимо того, что она вызывается два раза для стрелок и системных клавиш, так еще и первые коды с буквой "р" совпадают. Как можно сделать, что бы это нормально все работало?

Читабельный исходник:
http://pastebin.com/zBP3ezRG
[ссылка заблокирована по решению администрации проекта]. com/zBP3ezRG

Исходник:
#include <iostream>
#include <conio.h>
#include <string>

using namespace std;

int main(){
setlocale(LC_ALL,"Russian");

int my;
while(true){
cout<<"Нажмите стрелку или клавишу \"р\":\n";
my = _getch();

if(my==75){
cout << "Вы нажали влево\n\n";
}

if(my==77){
cout << "Вы нажали вправо\n\n";
}

if(my==80){
cout << "Вы нажали вниз\n\n";
}

if(my==72){
cout << "Вы нажали вверх\n\n";
}

if(my==224){
cout << "Вы нажали клавишу \"р\"\n\n";
}

if(my == 27){
break;
}
}

return 0;
}
Андрей Радыгин
Андрей Радыгин
40 015
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main()
{ unsigned char my;
setlocale(LC_ALL,"Russian");
while(true)
{
my=0;
cout << "\n\n\n\nНажмите стрелку или клавишу \"р\":\n";
if(!kbhit())
{
int i=getch();
switch(i)
{
case 224: if(!kbhit()) { cout << "Вы нажали клавишу \"р\"\n"; break; }
case 0: i=getch();
switch(i)
{
case 72: cout << "Вы нажали вверх \x18\n"; break;
case 80: cout << "Вы нажали вниз \x19\n"; break;
case 77: cout << "Вы нажали вправо \x1A\n"; break;
case 75: cout << "Вы нажали влево \x1B\n"; break;
}
break;
case 27: exit(0);
}
}
}
return 0;
}
Руслан Ибрагимов
Руслан Ибрагимов
76 473
Лучший ответ
Андрей Радыгин Спасибо большое.
// Алекс_Красс_2011-11-03
#include <iostream>
#include <conio.h>
#include <windows.h>

using namespace std;

void main()
{
setlocale(LC_CTYPE,"Russian_Russia.1251");

do
{
cout << "\n Нажмите на стрелку или клавишу \"р\":";

if(!kbhit())
{
short key = _getch();

if (key == 224)
{
if(!kbhit())
{
cout << "\n\t Вы нажали клавишу \"р\" приложение будет закрыто! \a";
Sleep(3000);
return;
}
else key = _getch();
}

if (key == 72) cout << "\n\t Вы нажали на стрелку вверх! ";
else if (key == 75) cout << "\n\t Вы нажали на стрелку влево! ";
else if (key == 77) cout << "\n\t Вы нажали на стрелку вправо! ";
else if (key == 80) cout << "\n\t Вы нажали на стрелку вниз! ";
}
}
while(true);
}
Евгений
Евгений
65 968
Андрей Радыгин Спасибо вам большое за ответ. ))
=))элементарная
Андрей Радыгин Может тогда расскажете, как эта элементарная задача решается? Буду очень признателен. ))