从Ruby中的控制台读取输入?


115

我想用ruby编写一个简单的A + B程序,但是我不知道如何使用控制台。


10
我说的是Ruby,但不是ROR。关于控制台的输入,这里没有任何消息。
谢尔盖

Answers:


227

你在说什么gets

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

这样的事吗?

更新资料

Kernel.gets尝试读取在其中找到的参数,ARGV并且仅在未ARGV找到时要求控制台。即使ARGV不是空的也要强制从控制台读取STDIN.gets


59
我与此解决方案有冲突:Kernel.gets尝试读取在其中找到的文件,ARGV并且仅在找不到时要求控制台ARGV。即使ARGV不是空的也要强制从控制台读取,请使用STDIN.gets
fguillen 2012年

3
a.to_i并且b.to_i可以更好地
多利安

gets阻止?如果不是,是否有任何替代品正在阻碍?
noMAD 2013年

1
@fguillen是一个很好的答案,不应隐藏在评论中。请给我一个答案吧?谢谢!
Dan Rosenstark 2013年

2
@Yar感谢您的建议,我已经为答案本身添加了更新
fguillen

28

您还可以通过命令行传递参数。命令行参数存储在数组ARGV中。因此ARGV [0]是第一个数字,而ARGV [1]是第二个数字

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

你这样称呼它

% ./plus.rb 5 6
==> 11

10

有很多方法可以从用户那里获取输入。我个人喜欢使用该方法获取。使用get时,它将获取 您键入的字符串,其中包括您按下以结束输入的ENTER键。

name = gets
"mukesh\n"

您可以在irb中看到此内容;键入此内容,您将看到\ n,它是ENTER键产生的“换行符”:键入name = gets您将看到类似内容,"mukesh\n" 您可以使用chomp方法摆脱讨厌的换行符

chomp方法为您返回字符串,但没有终止换行符。美丽的排骨方法的生命救星。

name = gets.chomp
"mukesh"

您也可以使用终端读取输入。ARGV是在Object 类中定义的常量。它是Array类的实例,可以访问所有数组方法。由于它是一个数组,即使它是一个常量,也可以毫无问题地修改和清除其元素。默认情况下,在调用命令行二进制文件时,Ruby捕获传递给Ruby程序的所有命令行参数(由空格分隔),并将它们作为字符串存储在ARGV数组中

当在您的Ruby程序中编写代码时,ARGV将采用如下所示的命令行命令:

test.rb hi my name is mukesh

并创建一个如下所示的数组:

["hi", "my", "name", "is", "mukesh"]

但是,如果我想传递有限的输入,那么我们可以使用类似的方法。

test.rb 12 23

并在程序中使用以下输入:

a = ARGV[0]
b = ARGV[1]

5

如果要保留Terminal中的参数,请尝试以下代码:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"

0

如果要制作交互式控制台:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

用法(假设您将摘要上方的代码放入summator当前目录中的文件中):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

使用Ctrl + D退出

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.