3

キーボードをチェックする方法が必要です。1つのキーが押されているかどうかを確認し、押されている場合はキーを取得し、押されていない場合は離れて仕事に取り掛かります。確認する必要があるのは、約5ダースのキーだけです。そして、私は頻繁にチェックに戻ります(つまり、このチェックは、[プログラムが実行されている限り]無限に繰り返されるプログラムの一部にあります。]あるいは、割り込みとして実装することもできます。つまり、残りを実行します。ループのを押して、押されたときにキーを取得します。

getとgetcはどちらもリターンを待つため、私には機能しません。私はJavaとWindowsで例を見つけましたが、私はMacを使用しています。

4

1 に答える 1

3

ttyデバイスに文字を編集して戻るのを待つ機会を与えずに文字をすぐに読み取るには、次のようなものが必要になります。

system 'stty cbreak'
$stdout.syswrite 'How now: '
q = $stdin.sysread 1
puts
puts "You typed #{q} it seems."
system 'stty cooked'

使用可能な文字のチェックを追加するには、文字を拡張して非ブロッキング読み取りを実行します...

def read1maybe
  return $stdin.read_nonblock 1
rescue Errno::EAGAIN
  return ''
end

system 'stty cbreak'
while true
  q = read1maybe
  break if q.length > 0
  puts 'you did not change anything'
  sleep 1
end
puts
puts "You typed #{q} it seems."
system 'stty cooked'

より複雑なものについては、標準ライブラリのcursesパッケージを参照してください。io/consoleも便利です。

于 2012-08-08T20:29:36.543 に答える