0

我正在用 Ruby 编写程序,但在使用 sciTE 文本编辑器从命令提示符获取信息时遇到问题。例如,当我尝试运行需要用户输入的代码时(例如,输入“请输入您的姓名:” name = gets()),命令行会弹出,但我“输入”到屏幕上的信息不会不显示。当我尝试输入信息(字母或数字)时,什么也没有发生。然后我关闭命令提示符并在 sciTE 输出窗口中收到错误代码。有什么想法吗?谢谢!

4

2 回答 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:

  1. 您的 Windows Ruby 安装应该包括一个名为“使用 Ruby 启动命令提示符”的快捷方式(在“开始”菜单下)。运行那个。
  2. 在 Ruby 命令提示符中,导航到 Hello World Ruby 文件所在的路径。
  3. 键入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 回答