Getch аналоги для linux

Getch аналоги для linux

Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Форум программистов > C/C++ программирование > Общие вопросы C/C++
Эквивалент функции getch() в Linux.
Регистрация

I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Вот только зачем тебе понадобилось эмулировать эту функцию? Задерживать вывод с ожиданием _любой_ кнопки — в 99% моветон.

Источник

Русские Блоги

Подобные функции getch () под Linux

Эта статья передается из https://www.cnblogs.com/zhanggaofengneg/p/6044947.html

1. Используйте систему («STTYRE ^ H») в программе; может быть реализован во входном состоянии, нажмите убранную клавишу, чтобы удалить символы, не выставленные.

Вызов TCSetattr Изменение Linux Базовые определения символов управления ввода

Интеллектуальная рекомендация

Пошаговая загрузка файла Spring MVC-09 (на основе файла загрузки клиента Servlet3.0 + Html5)

пример тестовое задание Исходный код Несмотря на загрузку файлов в Servlet3.0 +, мы можем очень легко программировать на стороне сервера, но пользовательский интерфейс не очень дружелюбен. Одна HTML-ф.

Создайте многоканальное окно в приложениях Win32

Создайте многоканальное окно в приложениях Win32, создайте несколько оконных объектов одного и того же класса Windows, а окна объектов разных классов окон. .

Путь к рефакторингу IOS-APP (3) Введение в модульное тестирование

IOS-APP реконструкция дороги (1) структура сетевых запросов IOS-APP реконструкция дороги (два) Модельный дизайн При рефакторинге нам нужна форма, позволяющая вносить смелые изменения, обеспечивая при .

Читайте также:  Ssh client ��� mac os

Tree——No.617 Merge Two Binary Trees

Problem: Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new bin.

Источник

Использование kbhit () и getch () в Linux

в Windows у меня есть следующий код для поиска ввода без прерывания цикла:

однако, видя, что нет conio.h , каков самый простой способ достижения этого же самого в Linux?

4 ответов

приведенное выше ncurses howto может быть полезно. Вот пример, иллюстрирующий, как ncurses можно использовать как пример conio:

обратите внимание, что с ncurses, то iostream заголовок не используется. Это потому, что смешивание stdio с ncurses может иметь неожиданные результаты.

ncurses, кстати, определяет TRUE и FALSE . Правильно настроенные ncurses будут использовать тот же тип данных для ncurses’ bool как компилятор C++, используемый для настройки на ncurses.

если ваш linux не имеет conio.h , обслуживающей kbhit() вы можете ознакомиться вот код Моргана Мэттьюса обеспечить kbhit() функциональность в пути совместимом с любой системой POSIX уступчивой.

как трюк деактивации буферизации на уровне termios, он также должен решить getchar() проблема, как показал здесь.

при использовании ncurses функционально эквивалентно Turbo C » conio.H » API, более полное решение-использовать реализацию conio, как может быть найти здесь.

вы загружаете и используете его в своей программе для очень полной реализации интерфейса conio в Linux. (Или OSX.) Автор Рон Берки.

компактное решение, основанное на ответе Кристофа, —

В отличие от этого ответа, это не оставит терминал в странном состоянии после выхода программы. Однако он по-прежнему оставляет символы, сидящие во входном буфере, поэтому нажатая клавиша будет неприятно отображаться в следующей строке приглашения.

другое решение, которое устраняет эту проблему

использование выглядит следующим образом

Читайте также:  Драйвер чипсета nvidia windows 10

Теперь все символы набраны между выполнением первой и последней строк в терминале не будет отображаться. Однако, если вы выходите с Ctrl+C, терминал и ушел в странном состоянии. (Вздох)

Источник

Какие есть альтернативы getch() в си?

Библиотека conio не найдена, а в ней была getch()
Устанавливать библиотеку не вариант, т.к на других компах программа не запутаться потому что там нету этой библиотеки как и на большинстве компьютерах.

Нужна альтернатива getch(), то есть что бы функция принимала значение, а после запуска программы не нужно было нажимать Enter после введённого значения

  • Вопрос задан 20 нояб. 2020
  • 338 просмотров

Устанавливать библиотеку не вариант, т.к на других компах программа не запутаться потому что там нету этой библиотеки как и на большинстве компьютерах.

статической компоновке с библиотекой

Kaktys_DH, собираешь пакет, в котором депендом обьявляешь ncurses, пакетный менеджер при установке пакета найдет, скачает и поставит, если еще нет. Либа достаточно популярная. Минус в том, что придется возможно несколько форматов пакетов поддерживать — rpm и deb как минимум. ну и в исходниках написать, что проект требует ncurses.

Насколько я помню, conio.h — была досовая специфично-борландовская фигня.

Источник

C++ и виндовая getche() в Linux

Всем привет! Изучаю C++ по книге Лафоре — ООП в C++.

Всё шло прекрасно, до момента появления в примерах виндового заголовочного файла «conio.h» и входящей в него функции getche().

Пошарившись по форумам нашёл кусок кода который имитирует функцию getche(), но приспособив её в код примера из книги, на выходе получил, что ввод с клавиатуры не осуществляется, вот уже час чешу репу и не могу понять где костыль, надеюсь на вашу помощь. Если в кратце, то программа подсчитывает количество введённых символов и слов, а после нажатия ENTER, выводит результат. Ниже привожу листинг:

Во-первых символ перевода строки — \n. Во-вторых код наверняка сломается на utf-8.

Почитай Прату. И почему нельзя просто использовать cin.get[line]()?

Читайте также:  Epson m2140 драйвер linux

1. \n — сработает после прекращения цикла, так что он тут вообще никак не влияет. 2. Не сломается, если я не буду вводить клавы кириллицу.

И почему нельзя просто использовать cin.get[line]()?

А можно по подробнее? Я видел данную функцию, но попытка припилить не увенчалась успехом (

Это DOSовский еще файл. Его ближайшим аналогом в Linux является ncurses.h, но ты реально не хочешь туда.

Поковыряв код, заметил интересную фичу, если потоки вывода поместить вне цикла while, то по нажатию ENTER цикл не прервывается, а если потоки переместить в цикл после else, то после нажатия ENTER вылетает простыня:

ЕМНИП в Лафоре в приложении приводились какие-то костылики для совместимости, с недостающими (как в этом случае) заголовочниками, чтобы примеры можно было на любой системе компилировать. Ну и традиционно на сайте издательства можно порыскать.

Проверить не могу, потому что мой бумажный экземпляр давно ушёл по рукам.

ЕМНИП у Шилдта вендовставок не было. Я, кстати, на первом курсе пользовался этим костылем(и еще парой с очисткой входного потока и экрана), все работало нормально :/

Всё! Нашёл в чём костыль был! Надо было всего-то заменить ‘\r’ на ‘\n’ и цикл благополучно завершался 😀

Всем спасибо за помощь, варианты хороших учебников по прежнему принимаю )

у тебя cin.get() тянет ввод оттуда, куда ты делаешь вывод через cout. эта фича называется «непонимание работы программы».

Проблема не в C++ и потоках, а в буферизации ввода терминалом. Чтобы всё работало как с getche() необходимо отключить буферизацию. Рабочий пример:

Ты не правильно используешь терминологию: костыли – некие грязноватые ухищрения для достижения работоспособности. А у тебя был баг, на который указали в первом посте, да)

Ну это conio.h не входит в стандарт gcc, а значит это как вы выразились «Некое грязноватое ухищрение», только применяемое в вантузе, а значит это костыль. ))

Забей пока на плюсы учи для начала С по книге K&R.

Источник

Оцените статью