我正在用 Ruby 编写程序,但在使用 sciTE 文本编辑器从命令提示符获取信息时遇到问题。例如,当我尝试运行需要用户输入的代码时(例如,输入“请输入您的姓名:” name = gets()),命令行会弹出,但我“输入”到屏幕上的信息不会不显示。当我尝试输入信息(字母或数字)时,什么也没有发生。然后我关闭命令提示符并在 sciTE 输出窗口中收到错误代码。有什么想法吗?谢谢!
问问题
297 次
2 回答
0
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 >
于 2012-02-22T04:52:51.270 回答
0
我今天通过 Neighborly 先生的 Ruby 教程遇到了这个问题,并得出了答案。这是 SciTE 的一个已知问题以及它与gets()
Windows 上的 stdin ( ) 交互的方式。
要按原样运行教程代码,请使用命令提示符运行您的程序,而不是 Neighborly 先生的 Humble Little Ruby Book 中提到的 SciTE 'Go' 键 [F5],如下所示:
解决方法 1:
- 您的 Windows Ruby 安装应该包括一个名为“使用 Ruby 启动命令提示符”的快捷方式(在“开始”菜单下)。运行那个。
- 在 Ruby 命令提示符中,导航到 Hello World Ruby 文件所在的路径。
- 键入
ruby hello.rb
并按 [Enter]。(替换hello.rb
为您的文件名。)
解决方法 2:
另一种选择是忽略损坏的命令提示符,而使用 SciTE 的内部命令提示符。但是,这需要您$stdout.flush()
在每个puts()
语句之后添加,如下所示:
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()。)
于 2013-12-19T14:54:52.697 回答