Есть лабиринт.
Передвижение по нему осуществляется с помощью стрелок клавиатуры, а выход из программы с помощью русской буквы "р". (менять нельзя)
Так вот, возник вопрос, как можно узнать, какую именно клавишу нажал пользователь?
Для реализации использовал функцию _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;
}
Другие языки программирования и технологии
Вроде бы простенькая задача С++. Выручайте, не знаю как реализовать.
#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;
}
#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;
}
Андрей Радыгин
Спасибо большое.
// Алекс_Красс_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);
}
#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);
}
Андрей Радыгин
Спасибо вам большое за ответ. ))
=))элементарная
Андрей Радыгин
Может тогда расскажете, как эта элементарная задача решается? Буду очень признателен. ))
Похожие вопросы
- Паскаль. Простенькая задача
- Помогите написать простенькие задачи в паскале
- Простенькая задача. C#
- Вроде Pascal. Решить задачи, объяснить.
- задача по Basic кто знает как решить?
- помогите решить задачу по паскалю не знаю как делать вообще
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
- кто нибудь знает турбо паскаль?помогите решить!выручайте,срочно надо!
- !!! Каким кодом на C++ можно реализовать следующую задачу? помогите написать программку !!!
- Задача в паскале: реализовать рекурсивный алгоритм, печатающий все подмножества множества {1,2...N}