質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2288閲覧

引数コマンドARGVの使い方を教えてください

masamasamasa

総合スコア95

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/01/28 14:06

編集2018/01/29 02:03

したいこと

引数コマンドARGV[0]を使って、get.to_i で一つ一つ入力したい
問題点

get.to_i の部分で自動で入力が行われてしまう。
inputのところの
input_filename = ARGV[0]
output_filename = ARGV[1]
をARGV[0], ARGV[1]にしてから問題が発生。
input_filename
output_filename
の2つにファイル名を直接入力すると通常どうり作動する

=begin スクリプトの説明 テレビタレントの芸歴を当てるクイズ 1. printメゾットを使用してサービスを説明する 2. 必要な変数を用意する 3. 組み込みライブラリのopen関数を使用してファイルを読み込んで正解を変数に入れる 4. gets関数を使用して問題に対する答えを入力してもらい、if文で正誤判定をする 5. すべて正解したらopen関数で出力用のファイルを開いて、人数と合計試行回数を出力ファイルに出力する =end def game # サービスの説明 print "\nこれは10人のテレビタレントの芸歴(年数)を当てるクイズです\n\n" print "やること\n" print " 1. タレントの芸歴(年数)を予想して入力する\n" print " 2. 不正解のときはヒントを手がかりに正解するまで入力する\n" print "10人すべて正解したら「コンプリート!」と表示されて、クイズの終了!\n" print "芸歴制覇を目指して頑張ってください!\n" # 必要な変数を用意 $num_ans = 0 # 正解を入れる変数 $count = 0 # 合計試行回数をカウント $times = 0 # 一人目二人目をカウント # input input_filename = ARGV[0] #←問題点。 problem4_1H140412_in.txt output_filename = ARGV[1] #←問題点 problem4_1H140412_out.txt file = open(input_filename, "r") while $num_ans = file.gets() $times = $times + 1 input_to_output() end file.close # output file = File.open(output_filename,"w") file.puts 'コンプリート!' file.puts "#{$times}人すべて正解しました。おめでとうございます!" file.puts "合計試行回数は#{$count}回でした" file.close puts 'コンプリート!' puts "#{$times}人すべて正解しました。おめでとうございます!" puts "合計試行回数は#{$count}回でした" end def input_to_output comedian = ["松本人志", "関根勤", "ジミー大西", "ピコ太郎", "出川哲朗", "ネプチューン名倉", "坂上忍", "岡村隆史", "上田晋也", "オードリー若林"] printf("%d人目 : %sの芸歴を予想して、年数で入力してください ", $times, comedian[$times-1]) print "あなたの答え => #{num_try = gets.to_i}年目\n" print "\n----------参考年表------------\n" print " 志村けん 46 年\n" print " 明石家さんま 44 年\n" print " 石橋貴明 38 年\n" print " さまーず三村 30 年\n" print " 宮迫博之 29 年\n" print " サバンナ高橋 23 年\n" if num_try > $num_ans.to_i puts "\n=================================>> 残念!もっと少ない芸歴です\n\n\n\n" $count = $count + 1 input_to_output() elsif num_try < $num_ans.to_i puts "\n=================================>> 残念!もっと長い芸歴です\n\n\n\n" $count = $count + 1 input_to_output() else puts "\n=================================>> !!!!!!!!!!大正解!!!!!!!!!!\n\n\n\n" $count = $count + 1 end end game()

理由がよくわからないので、教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y-doi

2018/01/28 16:13

rails は関係なさそうなのでタグを消してください
guest

回答2

0

ベストアンサー

ARGVgetsを両方使う場合は、getsを STDIN.getsにすればよいとこちらに書いてます。

投稿2018/01/28 14:38

y-doi

総合スコア322

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masamasamasa

2018/01/28 15:26

助かりました。 ありがとうございます。
y-doi

2018/01/28 16:11

解決できてよかったです。 質問の仕方についてですが、問題が発生としか書かれてなかったのでエラーの内容を詳しく記した方がよいと思います。
guest

0

プログラムの構造が全然駄目なレベルなので、まずこういう問題からやってみてください。

0.問題ファイルには1行だけで、数字が1つだけ書いてある
1.問題ファイルを読む
2.人間に回答を入力させる
3.合っていれば正解と表示、および何回目の回答で正解したかの回数も表示して終わり
4.合ってなければ、小さいか大きいかを表示して2にもどる

グローバル変数は使わないで考えてください。

投稿2018/01/28 14:25

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問