2016-11-04 56 views
0

需要一些帮助,使def fact(n)命令可以处理用户输入。当我输入“Ruby factorial.rb 5”之类的东西时,我的脚本效果很好。但是,我需要这个提示来运行。该脚本应运行如下:用户输入以创建阶乘

puts 'Please input a non-negative integer:' 
n = gets.chomp.to_i 
puts "The factorial of #{n} is #{factorial} 

这是我的代码现在看起来像。就像我说的那样,它确实有效。这是当我的def fact(n)命令我自动接收的值为1不要紧,用户将在什么号码前加n = gets.chomp.to_i,它总是返回1.

#!/user/bin/ruby 
def fact(n) 
    if n==0 
    1 
    else 
    n * fact(n-1) 
    end 
end 
puts fact(ARGV[0].to_i) 

如何使这项工作与用户输入?我想我只是有一个语法问题,但不知道如何使它工作。

+1

试试'puts'请输入一个非负整数',然后'n = gets.to_i',然后'puts“#n的阶乘为#{fact(n)}'' –

+0

真棒。谢谢 –

+0

查看我刚才给出的完整答案。它向你展示了如何处理你所问的两件事情。 –

回答

0

你实际上似乎在寻求两种不同的东西。你想的第一件事是,做这样的事情

$ ruby factorial.rb 
> Please input a non-negative integer 
(GET USER INPUT) 
> The factorial of (USER INPUT) is (FACTORAIL OF USER INPUT) 

和一个命令行工具,做这样的事情

$ fact 10 
> 3628800 

第一种可能是这个样子

def fact(n) 
    (1..n).inject(:*) 
end 
puts 'Please input a non-negative integer' 
a = gets.to_i 
puts "The factorial of #{a} is #{fact(a)}" 
应用

第二个可能看起来像这样

#!/usr/bin/ruby 
puts (1..ARGV[0].to_i).inject(:*)