Как разделить нажатие стрелок и нажатие русских букв?

Здравствуйте. Команда getch() возвращает номер нажатой клавиши по таблице ASCII. Русские буквы находятся под номерами в диапазонах 127-176 и 223-242, включительно. Код стрелок состоит из двух чисел, где первое - всегда 224, которое также обозначает букву 'р' и в итоге следующий код работать не будет, т.к. если была введена буква 'р', то программа будет ждать ввод следующей буквы.
int ch = getch();
if (ch == 224) {
  int arrow = getch();
  switch (arrow) {
    ... // обработка стрелок
  }
}

Решить проблему можно проверив введен ли уже второй символ, но cin.get() и cin.peek() не работают, так как, как я понял, из буффера cin символ удаляется после использования getch(). Как это решить? Буду рад и решениям, реализованным не через getch(), но желательно никакого winapi.
  • Вопрос задан
  • 433 просмотра
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Стрелки действительно генерят два кода, но первый код все же 0, а не 224.
Ответ написан
@majstar_Zubr
C++, C#, gamedev
Вам не нужна getch, не пользуйтесь ей.

https://docs.microsoft.com/en-us/cpp/c-runtime-lib...

Если хотите всё же пользоваться, то вам придется самостоятельно делать обёртку для обработки двухбайтовых символов.

Но всё уже придумано, попробуйте _getwchar
https://docs.microsoft.com/en-us/cpp/c-runtime-lib...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы