Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
#1

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

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

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

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

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

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

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

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

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

Аналог функции fscanf (C++) - C++
Здравствуйте. По заданию нужно написать аналог функции fscanf на языке C++. Каким способом это можно реализовать: построчное чтение с...

Аналог функции fprintf в с++ - C++
Здравствуйте! Я долго искал в гугле аналог функции fprintf в с++, но так и не нашел и решил написать на форуме. Существует ли в с++ аналог...

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

Добавлено через 49 секунд
Цитата Сообщение от Пёс Посмотреть сообщение
но к сожалению она не входит ни в стандарт C++ ни в стандарт C
А причем тут стандарт и функция getch?
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
10.02.2013, 20:39  [ТС] #3
nonedark2008, на этом форуме уже не один раз слышал что "conio.h" пришёл откуда то из DOS'а и во многих версиях компиляторов, он просто-напросто отсутствует. А мне нужна такая функция, для создания удобного консольного интерфейса (с горячими клавишами и прочими свистелками-перделками), и при этом желательно чтобы был переносимый код.
1
Croessmah
Ушел
13717 / 7967 / 911
Регистрация: 27.09.2012
Сообщений: 19,609
Записей в блоге: 3
Завершенные тесты: 1
10.02.2013, 20:40 #4
Цитата Сообщение от Пёс Посмотреть сообщение
он просто напросто отсутствует
только на компиляторах под винду он есть
1
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
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 / 4
Регистрация: 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
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
10.02.2013, 20:58 #7
Цитата Сообщение от Пёс Посмотреть сообщение
Эх... к сожалению она отображает вводимые символы.... даёт возможность ввести больше чем 1 символ.... требует нажатия Enter по окончании ввода
я же добавил про возможность вернуть назад Enter... отображать можно полчить символ - отправить его в выходной поток... если встретил Enter - по выходу из цикла - верни его назад в поток
0
nonedark2008
997 / 737 / 168
Регистрация: 28.07.2012
Сообщений: 2,050
10.02.2013, 20:58 #8
Ну тогда могу посоветовать отдельно написать getch, который будет работать под Windows и отдельно - под Linux, и в момент компиляции определять командами предпроцессора какую компилировать.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
10.02.2013, 20:59 #9
сейчас попробую изобразить этот код, минуту
0
Croessmah
Ушел
13717 / 7967 / 911
Регистрация: 27.09.2012
Сообщений: 19,609
Записей в блоге: 3
Завершенные тесты: 1
10.02.2013, 21:01 #10
Цитата Сообщение от abit Посмотреть сообщение
и даже с возможностью вернуть назад в поток чего мы начитали лишнего
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
0
Пёс
228 / 76 / 4
Регистрация: 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
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
10.02.2013, 21:11 #12
Цитата Сообщение от Croessmah Посмотреть сообщение
проблема в том, что get "ждет" нажатия Enter, а getch не ждет
о как... об этом не знал...
это уже видимо небуферизованный ввод и видимо действительно нужна привязка к системным вызовам конкретной платформы...
тогда есть Си-шная библиотека ncurses, которая все это реализует
0
Пёс
228 / 76 / 4
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 21:11
Привет! Вот еще темы с ответами:

аналог функции STRNCAT(). - C++
Написать и протестировать аналог функции STRNCAT(). #include &lt;stdio.h&gt; #include &lt;conio.h&gt;

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

аналог функции IsDelimiter - C++
Ребят помогите! Всю голову сломал, в общем нужно написать аналог функции IsDelimiter, при этом без использования функции Pos! Помогите...

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


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

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

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