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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

1回答

866閲覧

Rubyでwhile文が機能しない

tetsuya19

総合スコア19

Ruby

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2021/12/24 09:26

編集2021/12/24 09:32

実現したい事:
Rubyの勉強で簡易的な電卓を作成しています。
途中でwhile文を使用しているのですが、うまくループが出来ません。
どなたかご教授をお願い致します。
環境:
Windows10
ruby 2.6.9p207 [x64-mingw32]

エラー:(実行時のエラーメッセージはなし)
実行例↓

計算を続行しますか?
続行なら「1」、終了なら「0」を入力してください。
計算を終了します。

※1を入力しても、計算せずに即時終了してしまう。

該当コード

  1. #表記順に計算する簡易電卓
  2. def calculate
  3. puts("計算式を入力してください")
  4. puts("※ただし最初の数字は整数かつ正の数を入力してください")
  5. input_value = gets
  6. puts input_value
  7. num_list = input_value.scan(/\d+/)
  8. print("入力した数値の一覧→")
  9. p num_list
  10. int_num_list = num_list.map(&:to_i)
  11. p int_num_list
  12. symbol_list = input_value.strip.scan(/\D+/)
  13. print("入力した演算子の一覧→")
  14. p symbol_list
  15. answer = int_num_list[0]
  16. puts(answer)
  17. for i in 0..2
  18. case symbol_list[i]
  19. when "+"
  20. answer = answer + int_num_list[i+1]
  21. puts answer
  22. when "-"
  23. answer = answer - int_num_list[i+1]
  24. puts answer
  25. when "*"
  26. answer = answer * int_num_list[i+1]
  27. puts answer
  28. when "/"
  29. answer = answer / int_num_list[i+1]
  30. puts answer
  31. when "%"
  32. answer = answer % int_num_list[i+1]
  33. puts answer
  34. when "**"
  35. answer = answer ** int_num_list[i+1]
  36. puts answer
  37. else
  38. puts "規定の演算子ではありません"
  39. end
  40. i += 1
  41. end
  42. end
  43. def select_menu
  44. puts("計算を続行しますか?")
  45. puts("続行なら「1」、終了なら「0」を入力してください。")
  46. input_select = gets
  47. while input_select == "1" do
  48. calculate
  49. select_menu
  50. end
  51. end
  52. calculate
  53. select_menu
  54. puts("計算を終了します")

補足while文は47行目~50行目です。
最初に計算しただけで1度もループせずに終わってしまう原因を
教えて頂ければと思います。
宜しくお願い致します。

再度補足で実際の実行例を載せておきます。
宜しくお願い致します。

ruby calculator.rb

計算式を入力してください
※ただし最初の数字は整数かつ正の数を入力してください
243+100/2-50
24
3+100/2-50
入力した数値の一覧→["24", "3", "100", "2", "50"]
[24, 3, 100, 2, 50]
入力した演算子の一覧→["*", "+", "/", "-"]
24
72
172
86
計算を続行しますか?
続行なら「1」、終了なら「0」を入力してください。
1
計算を終了します

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前回同様に strip を付けて改行コード(newline)を取り除きます。

ruby

1def select_menu 2 puts("計算を続行しますか?") 3 puts("続行なら「1」、終了なら「0」を入力してください。") 4 #input_select = gets 5 input_select = gets.strip 6 :

※ ただし、現状のコードでは 0 を入力しても停止しません。

投稿2021/12/24 09:35

melian

総合スコア20655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsuya19

2021/12/24 09:54

何度もお世話になり、すみません。 stripで、改行コードを除いておかないといけなかったんですね。 お陰様でループは出来るようになりました。 ご指摘の通り、0を入力しても停止は出来ていませんが、 それは何とか自力で解決したいと思います。 今回も素早い御回答ありがとうございました。
tetsuya19

2021/12/24 11:45

0を入力してもループ終了しない点は、 下記のように修正して、何とか自力で解決出来ました。 原因がイマイチよくわかっていないのですが、 while文の中で変数の参照が上手くいってなかったのですかね。 直接while文の条件式中にgets.stripを使用するのが ポイントだったよう気がします。 何はともあれ、ありがとうございました。 ------------------------------------------ def select_menu puts("計算を続行しますか?") puts("続行なら「0」、終了なら「1」を入力してください。") while gets.strip == "0" do calculate select_menu end puts("計算を終了します") exit end calculate select_menu -------------------------------------
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問