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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

2060閲覧

Rubyのcase文のエラーについて

nori7777

総合スコア23

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2017/05/26 03:39

###前提・実現したいこと
Rubyの書籍で学習している例文のcase文が同じように記述しても書籍の実行結果と違いエラーで返ってきます。
どういったことが原因なもでしょうか?

###発生している問題・エラーメッセージ

SyntaxError: (irb):2: syntax error, unexpected keyword_when when 3..5

###該当のソースコード

書籍の例文 a = gets.to_i case a when 3..5 puts "春です。" when 6..8 puts "夏です。" when 9..11 puts "秋です。" when 12,1,2 puts "冬です。" end 実行結果 3 春です。 *キーボードから入力した文字 と記載されてます

自身が実行したソースコード

a = gets.to_i
case a
when 3..5
と打つと
SyntaxError: (irb):2: syntax error, unexpected keyword_when
when 3..5
で返ってきます

###試したこと
構文エラーで返ってくるのは書籍の構文が間違いなのでしょうか?
自分で間違うには文も短いですし問題ないと思うのですが。。
###補足情報(言語/FW/ツール等のバージョンなど)

  • version ruby 2.3.0p0
  • cloud9 irb使用
  • Mac OS Sierra 10.12.5

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問者様のコードが

Ruby

1a = gets.to_i 2case a 3when 3..5

だったならば

Ruby

1a = gets.to_i 2case a 3when 3..5 4end

これで大丈夫かと。
書籍の例文は、実行できました。

#追記

ruby

1 2def season(a) 3 case a 4 when 3..5 then '春です' 5 when 6..8 then '夏です' 6 when 9..10 then '秋です' 7 when 11, 1, 2 then '冬です' 8 end 9end 10 11puts season(gets.to_i) 12

メソッド?にすればirbでも恐らくまとめて実行できます。

投稿2017/05/26 03:53

編集2017/05/26 05:09
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nori7777

2017/05/26 04:20

早急な解答ありがとうございます!end 記述前でエラーが出てしまうのです。。
退会済みユーザー

退会済みユーザー

2017/05/26 04:39 編集

なるほど。分かりました。irbに直接打ち込まれているんですね。 a = gets.to_i のあとにaを入力することになります。 例えば a = gets.to_i 3 case a when 3..5 end で試してみてください。
nori7777

2017/05/26 05:19

irbの場合はenterを押した時点で実行されるから、書籍の通りにはいかなかったのですね。これがエディター等で記述するとコンソールの方で何月かを選ぶと、そこにまた返ってくるという理解でよろしいでしょうかね?。。勉強になります!
退会済みユーザー

退会済みユーザー

2017/05/26 05:27 編集

その理解で良いと思います。記述して、コンソールから実行という感じです。 今回のプログラムはコンソールからの入力をgetsでとるようしているので 上手くいけば、コンソールに数字を入力することで季節を表示できるかと。
nori7777

2017/05/26 05:33

ありがとございます!フォローもさせて頂きました。お手すきがあればご教授またよろしくお願いします!
退会済みユーザー

退会済みユーザー

2017/05/26 05:35

暇人の私に答えられる範囲のことであればぜひ。
guest

0

getsに値が入ってないからじゃないですか?
以下で試してみてください

gets = '3' a = gets.to_i case a when 3..5 puts "春です。" when 6..8 puts "夏です。" when 9..11 puts "秋です。" when 12,1,2 puts "冬です。" end

投稿2017/05/26 03:52

h_daido

総合スコア824

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

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

nori7777

2017/05/26 04:20

早急な解答ありがとうございます!言われた通りgetsに値を入れると”春です。”と返ってきました。値を事前に入れることで返ってきたいうことなんですね。 そこで疑問があります。。getsメソッドはプログラム実行中に文字列を入力することができEnterキーが押されるまで、プログラムは入力待ちの状態になるはずで、この場合ですと記述文を書き終えてから何月かを入力してEnterを押すことで”春です。”と返ってくると理解してるのですが?
h_daido

2017/05/26 04:59

getsってKarnelだったんですね!知らなかったw railsでwebアプリつくってる分には使わなそうだけど、gemのインストーラーとかで使うのかな? ありがとうございます。こちらも勉強になりました。
maisumakun

2017/05/26 05:09

コンソールでちょっとしたプログラムを作るときには便利です>gets
nori7777

2017/05/26 05:29

皆さん詳しい解答ありがとございます。とても勉強になり理解が深まりそうであります!参考httpもありがとうございます!Kernel.#gets。。うむ・・勉強します
nori7777

2017/05/26 05:35

ありがとございました!フォローもさせて頂きました。お手すきがあればご教授またよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問