【问题标题】:Ruby program not running properly in terminalRuby 程序在终端中无法正常运行
【发布时间】:2016-03-29 00:35:07
【问题描述】:

我正在编写非常基本的 Ruby 程序来学习类的变量和方法。我写了以下内容:

puts 'What is your favorite number?'
fav_num = gets.chomp.to_i
better_num = fav_num + 1
puts better_num.to_s + ' ' + 'is a much better number than ' + fav_num.to_s + '!'

当我在终端中使用ruby variables-methods.rb 运行这个程序时,它会转到下一行并且什么也不做。如果我输入一个数字,就会发生这种情况:

22
What is your favorite number?
23 is a much better number than 22!

我在终端中更新了 Ruby。

知道可能出了什么问题吗?

【问题讨论】:

  • 你用的是什么终端?
  • Git Bash。我在 Windows 机器上。
  • bash 是你的shell,你的终端是什么?是你用“命令提示符”得到的吗?
  • 我可以使用 Windows Powershell 或命令提示符...有帮助吗?

标签: ruby windows command-line terminal git-bash


【解决方案1】:

存在刷新输入/输出流的问题。我不知道它是如何在您的终端中完成的,但下面的代码应该可以解决问题(注意输出流的显式 flush):

$stdout.puts 'What is your favorite number?'
$stdout.flush
fav_num = $stdin.gets.chomp.to_i
better_num = fav_num + 1
$stdout.puts better_num.to_s + ' is a much better number than ' + fav_num.to_s + '!'

【讨论】:

  • 成功了!我是否必须为所有未来的代码执行此操作?
  • 看来,如果我从 PowerShell 或命令行运行我的原始程序,它就可以工作。
  • 一般来说,您不需要flush 流。但是 windows 以拥有奇怪的终端仿真器而闻名,所以我不能保证你以后永远不会遇到这个多余的 flush :)
  • STDOUT 流应在任何时候看到行尾字符时刷新,这将在puts 处理表达式时发生。这可以通过简单地为流打开sync 来测试:STDOUT.sync = true,然后在不使用flush 的情况下运行代码。见stackoverflow.com/a/8949007/128421
猜你喜欢
  • 2016-04-01
  • 2015-12-31
  • 2015-05-25
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2021-01-20
  • 2013-11-26
相关资源
最近更新 更多