###状況
「作りながら学ぶRuby入門」という本の第3部の最後の課題をやっています。
蔵書を検索機能を追加しなさい、という課題です。プログラムは動くのですが、日本語の入力を受け付けません。
受け付けないというのは文字化けを起こすのではなく、入力してEnterキーを押すと消えてしまいます。
そこでプログラムが停止してしまいます。
英字で書いた場合は入力はできるのですが、該当データがないので何もかえってきません。
発生している問題・エラーメッセージ
検索をかけるために日本語を入力するとターミナルが以下の状態で固まります。 C:\Users\○○\Desktop\lesson-ruby\ruby_12>exam12.rb 1.蔵書データの登録 2.蔵書データの表示 3.蔵書データの検索 9.終了 番号を選んでください(1,2,9,3)3 書籍名:
該当のソースコード
Ruby
1def searchBookInfo 2 book_info = BookInfo.new("", "", 0, nil) 3 4 print "\n" 5 #print 'キー' 6 #print gets.chomp 7 print '書籍名:' 8 book_info.title = gets.chomp.encode('shift_jis').to_s 9 print '著者名:' 10 book_info.author = gets.chomp.encode('shift_jis').to_s 11 print 'ページ数:' 12 book_info.page = gets.chomp.to_i 13 print '発刊年:' 14 year = gets.chomp.to_i 15 print '発刊月:' 16 month = gets.chomp.to_i 17 print '発刊日:' 18 day = gets.chomp.to_i 19 book_info.publish_date = Date.new(year, month, day) 20 21 @book_infos[key] = book_info 22 23 search = book_info 24 25 @book_infos.each do |key, info| 26 search_flag = 1 27 input_check = 0 28 if search.title != '' 29 search_flag = 0 if search.title =~ /[^"#{info.title}"]/ 30 31 else 32 input_check += 1 33 end 34 if search.author != '' 35 search_flag = 0 if search.author != info.author 36 else 37 input_check += 1 38 end 39 if search.page != 0 40 search_flag = 0 if search.page != info.page 41 else 42 input_check += 1 43 end 44 if !search.pdate.nil? 45 search_flag = 0 if search.pdate != info.pdate 46 else 47 input_check += 1 48 end 49 50 # 比較が全て一致した蔵書データをハッシュに格納する 51 found_book[key] = info if search_flag == 1 && input_check < 4 52 end 53 54 puts "\n------------------------------" 55 if !found_book.empty? 56 # 全て一致した蔵書データを表示 57 found_book.each do |info| 58 print info.toFormattedString 59 puts "\n------------------------------" 60 end 61 else 62 print '条件に一致する蔵書はなし' 63 puts "\n------------------------------" 64 end 65 end
試したこと
WindowsのPCを使っているので文字コードの問題かと思い、gets.chompにコードの指定を付けましたが特に改善はされませんでした。
ネットで調べましたが同様の症状のものは見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
Vertion
ruby 2.5.7p206 (2019-10-01 revision 67816) [x64-mingw32]
unicode対応でないプログラム言語はUTF-8ではなく日本語に設定しています。
回答2件
あなたの回答
tips
プレビュー