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