2016-11-04 22 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} 

ここに私のコードがどのようになっているのですか?しかし、私が言ったように、それは動作します。私は、ユーザーが置くどのような数それを問題ではありません、私は自動的に1の値を受け取るdef fact(n)コマンドの前に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

あなたは実際には2つの異なることを求めているようです。あなたがしたいまず最初に、この

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

そして、最初のものは、この

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)}" 
のようになります。この

$ fact 10 
> 3628800 

のような何かをするコマンドラインツールのような何かをするアプリケーションです

次のようなものがあります。

#!/usr/bin/ruby 
puts (1..ARGV[0].to_i).inject(:*) 
関連する問題