От новичка до гуру: Курсы программирования на CyberDuff

Руби: gets.chomp 1 нажатие клавиши

Я хочу предложить пользователю нажать ESC или любую другую клавишу. Нажатие ESC остановит все дальнейшие действия. Нажатие ENTER (или любой другой клавиши) выполнит дополнительные действия.

Нажатие ENTER работает нормально, но gets ожидает, пока пользователь на самом деле нажмет Enter. Делая это не очень дружелюбным.

Есть ли способ продолжить после 1 нажатия пользователем клавиши?

puts "Press Enter to continue or ESC to quit..."
decision = gets.chomp

if decision != "^["
    then puts "do this stuff"
else
    puts "bye"
end
30.07.2016

Ответы:


1

Я полагаю, вы плохо понимаете, что делаете. Прежде всего, это зависит от используемой ОС. Я не знаю ни одного «стандартного» механизма, применимого ко всем операционным системам.

Во-вторых, сравнение со строкой, содержащей два символа, '^' и '[', никоим образом не совпадает с проверкой ESC.

Последнее, но не менее важное: gets буферизует ввод, если не нажата . Что вам нужно, чтобы прочитать один символ, это IO#getc .

Вот рабочий код для консоли unix:

puts "Press Enter to continue or ESC to quit..."
begin
  system("stty raw -echo")
  decision = STDIN.getc
ensure
  system("stty -raw echo")
end

if decision.ord != 27
  puts "do this stuff"
else
  puts "bye"
end
30.07.2016
  • ты прав. Все еще изучаю. Спасибо за разработку ваших рассуждений, это очень помогает понять, почему. 30.07.2016
  • Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..