Rubyで暗号化プログラムを書いてたとき、
ARGVと標準入力getsを一緒に使うとエラーが起きたので解決策をポストしときます。
encrypt.rb
file = open(ARGV[0])
puts "暗号キーを入力してください"
num = gets.to_i
# 以下省略
プログラムを実行するとgetsでの標準入力を受け付けない。
解決策
STDIN.getsにする。
encrypy.rb
file = open(ARGV[0])
puts "暗号キーを入力してください"
num = STDIN.gets.to_i
# 以下省略
別解
encrypy.rb
file = open(ARGV[0])
ARGV.clear
puts "暗号キーを入力してください"
num = gets.to_i
# 以下省略
理由
getsとARGFについて
-
Kernel#gets、Kernel#readline、Kernel#readlines
- それぞれARGF.gets、ARGF.readline、ARGF.readlinesと同じ。モジュール関数
-
ARGF
- ARGVの各引数をファイルパスとみなし、それらのファイルを連結した1つの仮想ファイルを表すオブジェクト。 ARGVが空なら標準入力する。
ARGVが空じゃなかったのでgetsできなかったんですね。
ARGV.clearで配列をきれいにしてあげるか、STDIN.getsのように別オブジェクトで標準入力を受け付けましょう。