2
0

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 5 years have passed since last update.

課題問題の取り組みプロセス

Last updated at Posted at 2018-02-20

http://tech-drill.in/questions/54 より

ひな型

def input_book_info
  book = {}
  puts "本の名前を入力してください:"
  book[:name] = gets.chomp
  puts "本の値段を入力してください:"
  book[:price] = gets.to_i
  puts "出版社を入力してください:"
  book[:company] = gets.chomp
  books << book
end

def show_book_info(books)
  unless books.empty?
    books.each do |book|
      put "番号:[#{index}], 本の名前: #{book[:name]}"
      index += 1
    end

    puts "詳細を見る本の番号を入力してください:"
    input = gets.to_i
    book = books[input]

    puts "本の名前: #{book[:name]}\t|値段: #{book[:price]}\t|出版社: #{book[:company]}"
  else
    puts "本が登録されていません。"
end

def end_program
  puts "ご利用ありがとうございました"
  exit
end


books = []

while true do
  puts "登録された本の数:#{books.length}"
  puts "[0]:本の情報を入力する"
  puts "[1]:本の名前を一覧表示する"
  puts "[2]:プログラムを終了する"
  input = gets

  if input == 0
    input_book_info(books)
  elsif input == 1
    show_book_info(books)
  else
    end_program
  end
end

このひな型は間違っている箇所があって、このままではエラーが出る。

getsをgets.to_iに

41行目のinput = getsはこのままだと文字列として入力した値を受け取ってしまうのでgets.to_iに書き換えた。

input_book_infoメソッドの引数

ひな型では1行目で定義されているinput_book_infoメソッドが引数を受け取っていなかったのでbooksを引数として受け取るように変更を加えた。

変数indexを定義

17行目でindex += 1とあるが、そもそも変数indexが定義されていないので、eachループ文の前でindex = 0と初期値を定義する。

put → puts

単純なタイプミスを修正。

endの数が足りない

ここまでは順調だったが、このまま実行してみると
syntax error, unexpected end-of-input, expecting keyword_end
というエラーが出た。syntax(構文)エラーでスクリプトが予期せぬ終わり方をしてるとのことなのでおそらくendが足りてないと予想。
どこで足りてないのかわからず(最後のwhile文周辺ばかりを見ていた)あまりに長時間苦戦したので解答をカンニング。unless文のendが足りていなかった。

修正後のコード


def input_book_info(books)
  book = {}
  puts "本の名前を入力してください:"
  book[:name] = gets.chomp
  puts "本の値段を入力してください:"
  book[:price] = gets.to_i
  puts "出版社を入力してください:"
  book[:company] = gets.chomp
  books << book
end

def show_book_info(books)
  unless books.empty?
    index = 0
    books.each do |book|
      puts "番号:[#{index}], 本の名前: #{book[:name]}"
      index += 1
    end

    puts "詳細を見る本の番号を入力してください:"
    input = gets.to_i
    book = books[input]

    puts "本の名前: #{book[:name]}\t|値段: #{book[:price]}\t|出版社: #{book[:company]}"
  else
    puts "本が登録されていません。"
  end
end

def end_program
  puts "ご利用ありがとうございました"
  exit
end


books = []

while true do
  puts "登録された本の数:#{books.length}"
  puts "[0]:本の情報を入力する"
  puts "[1]:本の名前を一覧表示する"
  puts "[2]:プログラムを終了する"
  input = gets.to_i

  if input == 0
    input_book_info(books)
  elsif input == 1
    show_book_info(books)
  else
    end_program
  end
end
2
0
1

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?