Форум программистов, компьютерный форум CyberForum.ru

Беда с функцией _getch()! - C++

Восстановить пароль Регистрация
 
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
19.08.2016, 23:13     Беда с функцией _getch()! #1
Проблема заключается в следующем:
функция _gettch() ловит код клавиши, если этот код 224-клавиша служебная.... если второй раз вызвать эту функцию мы получим код служебной клавиши. но функция _gettch() неправильно ловит русские буквы, поэтому начал пользоваться функций _getch().А теперь проблема, код русской буквы "а" -224 и служебных кнопок любых такой же код. Второй раз функция _getch() клавишу не ловит, тоесть я не узнаю была ли это служебная кнопка, либо же буква А.
Что делать? сижу курю бамбук, код не пишется дальше из за этого.....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2016, 23:13     Беда с функцией _getch()!
Посмотрите здесь:

Временный _getch() C++
Как правильно работать с функцией _getch() ? C++
C++ Не могу разобраться с _getch
Очистка потока _getch() C++
C++ Проверка буфера _getch()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
19.08.2016, 23:55     Беда с функцией _getch()! #2
Цитата Сообщение от illision1 Посмотреть сообщение
клавиша служебная
Это ты о чем?
Если про всякие стрелки и тому-подобное, то их нажатие порождает два символа - getch нужно вызывать 2 раза.
В таком случае первым идет код 0 или 0xE0.
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
20.08.2016, 00:06  [ТС]     Беда с функцией _getch()! #3
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это ты о чем?
Если про всякие стрелки и тому-подобное, то их нажатие порождает два символа - getch нужно вызывать 2 раза.
В таком случае первым идет код 0 или 0xE0.
nonedark2008,
Да, все правильно, два раза gettch вызываю.Если клавиша служебная, то первый раз вернет 224, а второй раз вернет уже код служебной клавиши.
А вот проблема в чем, на русской раскладке, при нажатии маленькой буквы -а- русской первый раз тоже выдает 224.
Что в этом случае делать?

Добавлено через 5 минут
nonedark2008,
C++
1
2
3
4
5
6
7
8
short Char = number = _getch();
        if (number == 224) {
            short choice = _getch();
            //вверх
            if (choice == 72)
                return;
            //вниз
            if (choice == 80) {
смотри вот код. Первый раз вызываю _getch(), если получаю не 224, то значит это буква, а не служебная кнопка, и иду букву обрабатывать.Теперь случай когда нажимаю служебную кнопку, Первый раз получаю 224,захожу в if и второй раз при вызове _getch(), функция автоматом сама возвращает код служебной кнопки и идет дальше ее обработка.
Тепер мой случай:нажимаю русскую букву -а- в нижнем регистре,Первый раз функция получает 224..... заходит в цикл естественно и на втором _getch() программа тормозит ожидая нажатия кнопки...Понятно так?

Добавлено через 50 секунд
nonedark2008,
Помоги пожалуйста, в этот раз действительно какая-то безысходная ситуация получается.
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
20.08.2016, 00:09     Беда с функцией _getch()! #4
ReadConsoleInput function

Частичная очистка экрана консоли
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
20.08.2016, 00:13  [ТС]     Беда с функцией _getch()! #5
gazlan, Извините, но это соооовсем не то, что нужно.Свою проблему подробно изложил там где скинул код.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
20.08.2016, 00:13     Беда с функцией _getch()! #6
Цитата Сообщение от illision1 Посмотреть сообщение
Что в этом случае делать?
Ну не знаю, консоль особо не рассчитана на русский язык, т.к. она является наследием давно минувших дней, собственно как и getch. Попробуй проверить с многобайтными символами (wchar_t, _getwch), но не уверен, что будет что-то толковое.

Предлагаю забить вообще на русский язык (как делают многие), либо выкинуть getch и воспользоваться Winapi-функциями. Там всякие GetAsyncKeyState, ToUnicode и прочее. Но как этим конкретно пользоваться я не советчик.
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
20.08.2016, 00:17  [ТС]     Беда с функцией _getch()! #7
nonedark2008,
Проблема в том, что задание состоит в том,чтобы написать словарь на грубо говоря C, даже vectorа нельзя использовать, и перерисовки(псевдографика) так же вручную. Так что Winapi не подходит
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
20.08.2016, 00:19     Беда с функцией _getch()! #8
А зачем в словаре нужен getch, обрабатывающий одновременно и текст и стрелки?
Я думаю, что эти две задачи можно разделить на две независимые.
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
20.08.2016, 00:27  [ТС]     Беда с функцией _getch()! #9
nonedark2008,
Вот зачем, словарь выводит возможные слова как в гугле, , и перехват стрелок нужен чтобы пользователь в любой момент мог перейти к выбору слова из списка,который видно на скриншоте.( слова тестовые, не обращайте внимание).
Миниатюры
Беда с функцией _getch()!  
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
20.08.2016, 00:39     Беда с функцией _getch()! #10
Цитата Сообщение от illision1 Посмотреть сообщение
это соооовсем не то, что нужно
Если бы вы не поленились пройти по ссылке и скачать Demo от MS, то уже исправляли бы свой код, а не писали на форуме...
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
20.08.2016, 01:08     Беда с функцией _getch()! #11
"Англо-Русский словарь" - может забить на ввод русских символов?
Я уже обозначил свою позицию по поводу русского в консоли.
Может сделать некоторый костыль, предполагающий, что пользователь не сможет одновременно ввести русскую букву, а затем сразу английскую (русская "а" и английская, соответствующая второму символу от нажатия стрелки), ибо это требует переключения языка.

Цитата Сообщение от illision1 Посмотреть сообщение
Так что Winapi не подходит
А кто сказал, что в Си нельзя Winapi? На нем даже гуишные окошечки запросто делаются.

Можно забить на системный язык ввода и сделать свою переключалку языка внутри программы, тогда вводиться будут только английские буквы, но в зависимости от внутрипрограммного языка выводиться будут англ/рус буквы.

Добавлено через 26 минут
gazlan, если уж придираться, то ReadConsoleInput - это тоже Winapi-функция, и она не особо лучше того, что я предлагал.
illision1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 17
20.08.2016, 01:37  [ТС]     Беда с функцией _getch()! #12
nonedark2008, gazlan,
Решение нашлось. _kbhit() спасло ситуацию
C++
1
2
3
short Char = number = _getch();
        if (number == 224&&_kbhit()) {
            short choice = _getch();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2016, 01:46     Беда с функцией _getch()!
Еще ссылки по теме:

C++ Идентификатор _getch неопределен
C++ Неверный результат _getch()
не работает ни _getch(), ни getch() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
20.08.2016, 01:46     Беда с функцией _getch()! #13
Цитата Сообщение от illision1 Посмотреть сообщение
Решение нашлось.
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Может сделать некоторый костыль, предполагающий, что пользователь не сможет одновременно ввести русскую букву, а затем сразу английскую
Ну, это оно и есть. Поздравляю =)
Yandex
Объявления
20.08.2016, 01:46     Беда с функцией _getch()!
Ответ Создать тему
Опции темы

Текущее время: 21:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru