Как на Си отследить нажатие расширенных кодов клавиш? (стрелки)
Есть способ в консоле, отследить курсорные клавиши? Там получается при getch() получаем первый код 224, а вторым считыванием 75 для стрелки в лево. Но ASCII 224 совпадает с буквой "р" . И если в логике читать следующий символ то букву "р" нет возможности ввести с первого раза. Я написал функцию ввода, редактирования, строки. Но перемещение право лево не получается. Хотя какая-то стандартная функция это делает. Но ей не как не передать строку для редактирования. Я читал, есть вариант с getchar() с отключением ECHO вывода буфера. Но может это как-то проще делается?
Ответы (2 шт):
Перевод ответа getch and arrow codes:
При нажатии одной из клавиш стрелок, getch помещает в буфер 3 значения:
\033[A,B,CилиD
Поэтому код должен выглядеть как то так:
if (getch() == '\033') { // если первое значение esc последовательность
getch(); // пропустить [
switch(getch()) { // реальное значение
case 'A':
// Код стрелки вверх
break;
case 'B':
// Код стрелки вниз
break;
case 'C':
// Код стрелки вправо
break;
case 'D':
// Код стрелки влево
break;
}
}
Так не попробуете?
for(;;)
{
int k = getch();
cout << hex << k;
if (kbhit())
{
int m = getch();
cout << " " << hex << m;
}
cout << endl;
}
Ну т.е. если что-то есть нажатое сразу же, то...