Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
1

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

10.02.2013, 20:20. Просмотров 5655. Ответов 12
Метки нет (Все метки)

Подскажите пожалуйста, аналог функции getch() (из файла "conio.h"), но чтобы она соответствовала стандарту C++. getchar() и объект "cin" не предлагать, ввиду нескольких причин:

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

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

Аналог getch или русские буквы в getch
Здравствуйте, уважаемые господа. Существуют ли какие-нибудь аналоги getch () и _getch, которые...

Нужен аналог функции getch() для Unix
Сталкнулся с такой проблемой не могу найти аналог функции getch для линукс мне просто нужно чтобы я...

аналог getch()
Ребят getch меня не устраивает следующим: когда окно теряет фокус он не работает. как выйти из...

Вычислить значение функции. Исполльзовать getch()
Тема: вычисление последовательностей. Пожалуйста весь код с функцией getch. Буду очень признателен

Аналог VB-функции Like
Есть ли в C++ аналог этой функции? Чтобы программа по заданному шаблону проверяла подобие строк....

12
nonedark2008
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
10.02.2013, 20:27 2
Цитата Сообщение от Пёс Посмотреть сообщение
чтобы она соответствовала стандарту C++.
Что подразумевается под соответствие? getch - вполне приемлемая функция для консольных приложения, и не важно, что программа написана на C или C++. Аналогов под консольное приложение я больше не вижу. Можно подобрать аналог из Winapi - но ведь это тоже не C++...

Добавлено через 49 секунд
Цитата Сообщение от Пёс Посмотреть сообщение
но к сожалению она не входит ни в стандарт C++ ни в стандарт C
А причем тут стандарт и функция getch?
0
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 20:39  [ТС] 3
nonedark2008, на этом форуме уже не один раз слышал что "conio.h" пришёл откуда то из DOS'а и во многих версиях компиляторов, он просто-напросто отсутствует. А мне нужна такая функция, для создания удобного консольного интерфейса (с горячими клавишами и прочими свистелками-перделками), и при этом желательно чтобы был переносимый код.
1
Croessmah
++Ͻ
15869 / 8997 / 1728
Регистрация: 27.09.2012
Сообщений: 22,109
Записей в блоге: 2
Завершенные тесты: 2
10.02.2013, 20:40 4
Цитата Сообщение от Пёс Посмотреть сообщение
он просто напросто отсутствует
только на компиляторах под винду он есть
1
10.02.2013, 20:40
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 780
10.02.2013, 20:51 5
Что подразумевается под соответствие? getch - вполне приемлемая функция для консольных приложения
getch вообще не приемлимая, а conio.h ни в С ни в С++ стандарт не входят, это MS-DOSовский инклуд изобретённый borland

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

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

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

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

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

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

http://www.cplusplus.com/reference/istream/istream/unget/
вот в том то и дело! что когда пишем cin::get(c); а потом вводим "gjfdjdc" то в "c" будет 'g' а весь остальной шлак будет во входной очереди..
0
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 780
10.02.2013, 20:58 7
Цитата Сообщение от Пёс Посмотреть сообщение
Эх... к сожалению она отображает вводимые символы.... даёт возможность ввести больше чем 1 символ.... требует нажатия Enter по окончании ввода
я же добавил про возможность вернуть назад Enter... отображать можно полчить символ - отправить его в выходной поток... если встретил Enter - по выходу из цикла - верни его назад в поток
0
nonedark2008
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
10.02.2013, 20:58 8
Ну тогда могу посоветовать отдельно написать getch, который будет работать под Windows и отдельно - под Linux, и в момент компиляции определять командами предпроцессора какую компилировать.
0
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 780
10.02.2013, 20:59 9
сейчас попробую изобразить этот код, минуту
0
Croessmah
++Ͻ
15869 / 8997 / 1728
Регистрация: 27.09.2012
Сообщений: 22,109
Записей в блоге: 2
Завершенные тесты: 2
10.02.2013, 21:01 10
Цитата Сообщение от abit Посмотреть сообщение
и даже с возможностью вернуть назад в поток чего мы начитали лишнего
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
0
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 21:08  [ТС] 11
Цитата Сообщение от Пёс Посмотреть сообщение
вот в том то и дело! что когда пишем cin::get(c); а потом вводим "gjfdjdc" то в "c" будет 'g' а весь остальной шлак будет во входной очереди..
вот тут я скосячил... после выполнения cin::get(c); входная очередь пуста.

Добавлено через 3 минуты
Цитата Сообщение от Пёс Посмотреть сообщение
вот тут я скосячил... после выполнения cin::get(c); входная очередь пуста.
или не пуста... а испорчена чтоли?? ничего не понимаю.... программа не просит вводить данные, но переменная заполняется шлаком.
0
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 780
10.02.2013, 21:11 12
Цитата Сообщение от Croessmah Посмотреть сообщение
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
о как... об этом не знал...
это уже видимо небуферизованный ввод и видимо действительно нужна привязка к системным вызовам конкретной платформы...
тогда есть Си-шная библиотека ncurses, которая все это реализует
0
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 21:11  [ТС] 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);
}
0
10.02.2013, 21:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 21:11

Аналог функции fprintf в с++
Здравствуйте! Я долго искал в гугле аналог функции fprintf в с++, но так и не нашел и решил...

Аналог функции SetLength
Здравствуйте. Подскажите, пожалуйста, каков аналог на си++ функции setlength? функция malloc?

Аналог функции scanf
Существует ли аналог для функции scanf в графическом редакторе?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.