【问题标题】:Trouble outputting and inputting information to command line using Ruby sciTE使用 Ruby sciTE 向命令行输出和输入信息时遇到问题
【发布时间】:2012-03-12 10:33:40
【问题描述】:
我正在用 Ruby 编写程序,但在使用 sciTE 文本编辑器从命令提示符获取信息时遇到问题。例如,当我尝试运行需要用户输入的代码时(例如,输入“请输入您的姓名:” name = gets()),命令行会弹出,但我“输入”到屏幕上的信息不会不显示。当我尝试输入信息(字母或数字)时,什么也没有发生。然后我关闭命令提示符并在 sciTE 输出窗口中收到错误代码。
有什么想法吗?
谢谢!
【问题讨论】:
标签:
ruby
input
command
prompt
scite
【解决方案1】:
I do hope I understand what you want to do, but this is a sample here from my irb prompt:
1.9.2-p290 :001 > def a
1.9.2-p290 :002?> puts "what is your name"
1.9.2-p290 :003?> name = gets.chomp
1.9.2-p290 :004?> puts "My name is #{name}"
1.9.2-p290 :005?> end
=> nil
1.9.2-p290 :006 > a
what is your name
abbb
My name is abbb
=> nil
1.9.2-p290 :007 >
【解决方案2】:
我今天通过 Neighborly 先生的 Ruby 教程遇到了这个问题,并得出了答案。这是 SciTE 的一个已知问题,以及它与 Windows 上的标准输入 (gets()) 交互的方式。
要按原样运行教程代码,请使用命令提示符来运行您的程序,而不是在 Mr. Neighborly 的 Humble Little Ruby Book 中提到的 SciTE 'Go' 键 [F5],如下所示:
解决方法 1:
- 您的 Windows Ruby 安装应该包含一个快捷方式(在
开始菜单)称为“使用 Ruby 启动命令提示符”。运行它。
- 在 Ruby 命令提示符下,导航到您的 Hello
World Ruby 文件所在位置。
- 键入
ruby hello.rb 并按[Enter]。 (将hello.rb 替换为您的文件名。)
解决方法 2:
另一种选择是忽略损坏的命令提示符,而使用 SciTE 的内部命令提示符。但是,这需要您在每个 puts() 语句之后添加 $stdout.flush(),如下所示:
puts "Hello, world. What is your name?"
$stdout.flush() # Add this line!
myname = gets()
puts "Well, hello there " + myname + "."
$stdout.flush() # Add this line!
注意
本教程第 0 章中的下一个不一致之处(您可能会立即注意到)是换行符 (\n) 包含在您的 myname 变量中(来自 gets() 的输入)。您可能会看到以下输出(注意第二行的“.”):
Well, hello there Yournamehere
.
要解决此问题,请将 myname.gets() 更改为 myname.gets().chomp()。
(请随时在在线 Ruby 文档中查找 chomp()。)