課題
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
まず、エラー表示によりend抜けを推測、unlessに対するend抜けは素早く発見できたが、その後エラー表示がなくなるので困った。プログラムは一応走るが、[0]:本の情報を入力する [1]:本の名前を一覧表示する がelse扱いになっているので、input以下に間違いがあると当初推測していたが、gets.to_iの単純な記述不足であった。その後リタイアしてしまったが…
以下 def show_book_infoのindex = 0の定義づけの抜け、1行目の引数の記述不足、他、じっくり眺めればわかる問題だった。要注意。
解答
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