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

Аналог функции getch() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 20:20     Аналог функции getch() #1
Подскажите пожалуйста, аналог функции getch() (из файла "conio.h"), но чтобы она соответствовала стандарту C++. getchar() и объект "cin" не предлагать, ввиду нескольких причин:

1.Они позволяют пользователю вводить более 1 символа (что мне совсем не нужно) и как следствие пункт 2
2.После ввода необходимо нажимать Enter
3.Они печатают на экране вводимые символы.
4.Они не ловят скан-коды сложных клавиш (Esc, F1 - F12, etc)

Всеми нужными свойствами обладает getch(), но к сожалению она не входит ни в стандарт C++ ни в стандарт C.
Посоветуйте что нибудь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2013, 20:20     Аналог функции getch()
Посмотрите здесь:

аналог функции STRNCAT() C++
аналог функции STRNCAT(). C++
C++ Аналог VB-функции Like
C++ аналог функции IsDelimiter
Аналог функции strcpy C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
10.02.2013, 20:27     Аналог функции getch() #2
Цитата Сообщение от Пёс Посмотреть сообщение
чтобы она соответствовала стандарту C++.
Что подразумевается под соответствие? getch - вполне приемлемая функция для консольных приложения, и не важно, что программа написана на C или C++. Аналогов под консольное приложение я больше не вижу. Можно подобрать аналог из Winapi - но ведь это тоже не C++...

Добавлено через 49 секунд
Цитата Сообщение от Пёс Посмотреть сообщение
но к сожалению она не входит ни в стандарт C++ ни в стандарт C
А причем тут стандарт и функция getch?
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 20:39  [ТС]     Аналог функции getch() #3
nonedark2008, на этом форуме уже не один раз слышал что "conio.h" пришёл откуда то из DOS'а и во многих версиях компиляторов, он просто-напросто отсутствует. А мне нужна такая функция, для создания удобного консольного интерфейса (с горячими клавишами и прочими свистелками-перделками), и при этом желательно чтобы был переносимый код.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
10.02.2013, 20:40     Аналог функции getch() #4
Цитата Сообщение от Пёс Посмотреть сообщение
он просто напросто отсутствует
только на компиляторах под винду он есть
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 20:51     Аналог функции getch() #5
Что подразумевается под соответствие? getch - вполне приемлемая функция для консольных приложения
getch вообще не приемлимая, а conio.h ни в С ни в С++ стандарт не входят, это MS-DOSовский инклуд изобретённый borland

я думаю ближайший простейший аналог -

http://www.cplusplus.com/reference/istream/istream/get/

и даже с возможностью вернуть назад в поток чего мы начитали лишнего

http://www.cplusplus.com/reference/i...istream/unget/
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 20:57  [ТС]     Аналог функции getch() #6
Цитата Сообщение от abit Посмотреть сообщение
я думаю ближайший простейший аналог -

http://www.cplusplus.com/reference/istream/istream/get/
Эх... к сожалению она отображает вводимые символы.... даёт возможность ввести больше чем 1 символ.... требует нажатия Enter по окончании ввода

Добавлено через 2 минуты
Цитата Сообщение от abit Посмотреть сообщение
и даже с возможностью вернуть назад в поток чего мы начитали лишнего

http://www.cplusplus.com/reference/i...istream/unget/
вот в том то и дело! что когда пишем cin::get(c); а потом вводим "gjfdjdc" то в "c" будет 'g' а весь остальной шлак будет во входной очереди..
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 20:58     Аналог функции getch() #7
Цитата Сообщение от Пёс Посмотреть сообщение
Эх... к сожалению она отображает вводимые символы.... даёт возможность ввести больше чем 1 символ.... требует нажатия Enter по окончании ввода
я же добавил про возможность вернуть назад Enter... отображать можно полчить символ - отправить его в выходной поток... если встретил Enter - по выходу из цикла - верни его назад в поток
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
10.02.2013, 20:58     Аналог функции getch() #8
Ну тогда могу посоветовать отдельно написать getch, который будет работать под Windows и отдельно - под Linux, и в момент компиляции определять командами предпроцессора какую компилировать.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 20:59     Аналог функции getch() #9
сейчас попробую изобразить этот код, минуту
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
10.02.2013, 21:01     Аналог функции getch() #10
Цитата Сообщение от abit Посмотреть сообщение
и даже с возможностью вернуть назад в поток чего мы начитали лишнего
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 21:08  [ТС]     Аналог функции getch() #11
Цитата Сообщение от Пёс Посмотреть сообщение
вот в том то и дело! что когда пишем cin::get(c); а потом вводим "gjfdjdc" то в "c" будет 'g' а весь остальной шлак будет во входной очереди..
вот тут я скосячил... после выполнения cin::get(c); входная очередь пуста.

Добавлено через 3 минуты
Цитата Сообщение от Пёс Посмотреть сообщение
вот тут я скосячил... после выполнения cin::get(c); входная очередь пуста.
или не пуста... а испорчена чтоли?? ничего не понимаю.... программа не просит вводить данные, но переменная заполняется шлаком.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
10.02.2013, 21:11     Аналог функции getch() #12
Цитата Сообщение от Croessmah Посмотреть сообщение
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
о как... об этом не знал...
это уже видимо небуферизованный ввод и видимо действительно нужна привязка к системным вызовам конкретной платформы...
тогда есть Си-шная библиотека ncurses, которая все это реализует
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 21:11     Аналог функции getch()
Еще ссылки по теме:

аналог getch() C++
Вычислить значение функции. Исполльзовать getch() C++
Аналог функции scanf C++

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

Или воспользуйтесь поиском по форуму:
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 21:11  [ТС]     Аналог функции getch() #13
Всё, разобрался.... входная очередь не очищается, всё читается корректно.

C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    char c,d;
    std::cin.get(c);
    std::cin.get(d);
}
Yandex
Объявления
10.02.2013, 21:11     Аналог функции getch()
Ответ Создать тему
Опции темы

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