【问题标题】:Ruby Pb. with "STDIN.getc" and "case when" in a loop红宝石铅。在循环中使用“STDIN.getc”和“case when”
【发布时间】:2016-06-27 14:53:48
【问题描述】:

我对以下代码有一些问题:

puts "Press a key"
key = STDIN.getc
puts key.class
puts "You have pressed #{key}"
puts key.class
while key != "f" do
    case key
    when "g"
      puts "It's 'g'"
    when "h"
      puts "It's 'h'"
    when "j"
      puts "It's 'j'"
    else
      puts "You gave me #{key} -- I have no idea what to do with that."
    end
    puts "Press a key"
    key = STDIN.getc
    puts "You have pressed #{key}"
end

如果你输入 'f',它可以正常工作,但如果你按示例输入 'g',就会出现 2 个问题:

  • “case when”运行所有情况,而不仅仅是 'g' char
  • WHILE 循环中的 STDIN.getc 似乎被执行了 2 次,即使我只键入了一个字符。

错在哪里?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    不知道确切,但似乎STDIN.getc 不会阻塞循环。
    你可以试试这样的

    puts "Press a key"
    while key = gets.chomp
      break if key == "f"
      puts key.class
      puts "You have pressed #{key}"
      puts key.class
    
      case key
      when "g"
        puts "It's 'g'"
      when "h"
        puts "It's 'h'"
      when "j"
        puts "It's 'j'"
      else
        puts "You gave me #{key} -- I have no idea what to do with that."
      end
    
      puts "Press a key"
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多