2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ARGVとgetsの併用

Posted at

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のように別オブジェクトで標準入力を受け付けましょう。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?