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

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

ただいまの
回答率

90.34%

  • Ruby

    8232questions

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

ruby Errno::EINVAL エラーになる

解決済

回答 1

投稿 編集

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

Masayuki.T

score 2

 前提・実現したいこと

(例)Rubyで蔵書管理アプリケーションを作っています。
BookInfoクラスとBookInfoManagerクラスを使った蔵書管理アプリケーション(テキスト版)を実装中に以下のエラーメッセージが発生しました。

 発生している問題・エラーメッセージ

1.蔵書データの登録
2.蔵書データの表示
9.終了
番号を選んでください(1,2,9):ex1401.rb:96:in gets': Invalid argument - <STDIN> (Errno::EINVAL)         from ex1401.rb:96:in gets'
from ex1401.rb:96:in run'         from ex1401.rb:123:in <main>'

ソースコード

・(ruby 1.93) 
・TeraPadを使い文字コードはUTF-8を使用しました。

# -*- coding: utf-8 -*-
 require 'date'

 class BookInfo

   def initialize( title, author, page, publish_date )
        @title=title
        @author=author
        @page=page
        @publish_date=publish_date
    end


attr_accessor :title, :author, :page, :publish_date


 def to_s
     "#{@title}, #{@author}, #{@page}, #{@publish_date}"
   end



    def toFormattedString(sep="\n" )
    "書籍名: #{@title}#{sep}著者名: #{@author}#{sep}ページ数: #{@page}ページ#{sep}発刊日: #{@publish_date}#{sep}"
      end
   end


  class BookInfoManager
    def initialize
    @book_infos={}
   end


   def setUp

 @book_infos["Yamada2005"]=BookInfo.new(
 "実践アジャイル ソフトウェア開発法とプロジェクト管理",
 "山田 正樹",
  248,
  Date.new(2005,1,25))

  @book_infos["Ooba2006"]=BookInfo.new(
  "入門LEGO MINDSTORMS NXT レゴブロックで作る動くロボット",
  "大庭 慎一郎",
  164,
  Date.new(2006, 12, 23))
 end

  def addBookInfo

   book_info=BookInfo.new("","",0,Date.new)

  print "\n"
  print "キー:"
  key=gets.chomp
  print "書籍名:"
  book_info.title=gets.chomp
  print "著者名:"
  book_info.author=gets.chomp
  print "ページ数:"
  book_info.page=gets.chomp.to_i
  print "発刊年:"
  year=gets.chomp.to_i
  print "発刊月:"
  month=gets.chomp.to_i
  print "発刊日:"
  day=gets.chomp.to_i
  book_info.publish_date=Date.new(year, month, day)

    @book_infos[key]=book_info
   end



  def listAllBookInfos
    puts "\n----------------------"
    @book_infos.each{|key,info|
       print info.toFormattedString
    puts "\n----------------------"
   }


 end


  def run
    while true

     print "
 1.蔵書データの登録
 2.蔵書データの表示
 9.終了
 番号を選んでください(1,2,9):"

     num=gets.chomp
     case
     when '1'==num

    addBookInfo
  when '2'==num

   listAllBookInfos
  when '9'==num

  break;
 else

     end
   end
  end


end


book_info_manager=BookInfoManager.new


book_info_manager.setUp


book_info_manager.run

 試したこと

類似の問題がないか複数のサイトで検索しましたが出てきませんでした。
単純な打ち間違いがないか何度も確認しましたが、なかったです。
プログラミング自体初心者です。もしよければどこが間違っているのか教えて欲しいです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • raccy

    2018/05/28 20:07

    手元では現象が発生しませんでしたので環境依存と思われます。お使いのOS、Rubyをインストールした方法、ruby -vの出力結果、使用したターミナル(コマンドプロンプト、ターミナル、ssh接続ならそのソフト等)、ターミナルの文字コード(Windows-31JだとかUTF-8だとか)、ターミナルのシェルや何か特殊なソフトを入れていないか、などわかる範囲で良いですので、詳細に書いてみてください。なにかわかるかも知れません。

    キャンセル

  • raccy

    2018/05/28 20:08

    また、Ruby1.9.3は非常に古く現在はサポートされていません。最新バージョンをインストールすることが可能であれば、最新バージョンでも発生するかどうかを試して見てください。

    キャンセル

  • raccy

    2018/05/28 20:10

    最後に、コードの最初に「```Ruby」とだけ書いた行、そして最後に「```」とだけ書いた行を追加してください。シンタックスカラーが適用され、質問が大変読みやすくなります。その他はヘルプにあるMarkdownの書き方をお読みください。読みにくい質問はそれだけで回答が大変つきにくくなります。

    キャンセル

回答 1

check解決した方法

0

Ruby の最新バージョンをインストールしたことで解決しました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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

  • Ruby

    8232questions

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