#c
#c
Вопрос:
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
int main()
{
int c = 0;
while (c != 27) //esc key code
{
c = 0;
switch (c = _getch())
{
case KEY_UP:
cout << endl << "Up" << endl;//key up
break;
case KEY_DOWN:
cout << endl << "Down" << endl; // key down
break;
case KEY_LEFT:
cout << endl << "Left" << endl; // key left
break;
case KEY_RIGHT:
cout << endl << "Right" << endl; // key right
break;
default:
cout << endl << "null" << endl;
break;
}
}
return 0;
}
Вывод должен быть
Up
Down
Left
Right
Но то, что я получаю, это
null
Up
null
Down
null
Left
null
Right
Основываясь на выходных данных, программа будет считывать другой код ключа, который я понятия не имею, что это такое, прежде чем читать фактический код ключа, у меня его не было cin
до этого, почему? есть решение?
Комментарии:
1. Вероятно, это
n
так.2. И какой закон точно помешал вам напечатать значение ключа чтения в
default:
разделе, чтобы определить, что еще читается, чтобы выяснить, что происходит?3.
_getch()
это не C . Похоже, это какое-то расширение Microsoft.4. Мне также интересно узнать, что помешало вам просто прочитать документацию?
Ответ №1:
Если бы вы решили прочитать руководство fine, вы бы столкнулись с этим утверждением:
При считывании функциональной клавиши или клавиши со стрелкой каждая функция должна вызываться дважды; первый вызов возвращает 0 или
0xE0
, а второй вызов возвращает фактический код клавиши.
Вот как вы можете определить, когда 72 означает стрелку вверх, а когда это буква H
(которая имеет ASCII-код 72).
Комментарии:
1. Значит, он считывает его как H или arrow? и какова будет фактическая реализация?
2. Я не понимаю вопроса.
Ответ №2:
Внесены изменения:
Я удалил default
из инструкции switch. Это вызывало нулевые отпечатки.
Кроме того, я также добавил kbhit()
and #define KEY_ESC 27
, и переместился getch()
на нашу сторону оператора switch .
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_ESC 27
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
int c = 0;
while ( c!= KEY_ESC ) //esc key code is 27
{
if (kbhit()) {
c = getch();
switch ( c )
{
case KEY_UP:
cout << endl << "Up" << endl;//key up
break;
case KEY_DOWN:
cout << endl << "Down" << endl; // key down
break;
case KEY_LEFT:
cout << endl << "Left" << endl; // key left
break;
case KEY_RIGHT:
cout << endl << "Right" << endl; // key right
break;
}//switch
}//if
}//while
return 0;
}