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

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

ただいまの
回答率

89.65%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 889

masamasamasa

score 59

したいこと

引数コマンド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()

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y-doi

    2018/01/29 01:13

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

    キャンセル

回答 2

checkベストアンサー

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/29 00:26

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

    キャンセル

  • 2018/01/29 01:11

    解決できてよかったです。

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

    キャンセル

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る