Как на Си отследить нажатие расширенных кодов клавиш? (стрелки)

Есть способ в консоле, отследить курсорные клавиши? Там получается при getch() получаем первый код 224, а вторым считыванием 75 для стрелки в лево. Но ASCII 224 совпадает с буквой "р" . И если в логике читать следующий символ то букву "р" нет возможности ввести с первого раза. Я написал функцию ввода, редактирования, строки. Но перемещение право лево не получается. Хотя какая-то стандартная функция это делает. Но ей не как не передать строку для редактирования. Я читал, есть вариант с getchar() с отключением ECHO вывода буфера. Но может это как-то проще делается?


Ответы (2 шт):

Автор решения: evo

Перевод ответа 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;
    }
}
→ Ссылка
Автор решения: Harry

Так не попробуете?

for(;;)
{
    int k = getch();
    cout << hex << k;
    if (kbhit())
    {
        int m = getch();
        cout << "  " << hex << m;
    }
    cout << endl;
}

Ну т.е. если что-то есть нажатое сразу же, то...

→ Ссылка