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

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

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

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

Q&A

解決済

3回答

1132閲覧

ruby if文について 

yusuke.

総合スコア66

Ruby

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

0グッド

0クリップ

投稿2016/07/22 01:35

ifを使って正解かどうかを判断したいのですが、答えと入力した結果があっているのに間違いになってしまします。プログラム文は正しいと思うのですが、なぜ合わないのでしょうか。下の写真のような感じでなっています。
例
入力した数字は1で
答えは1です。
しかし、間違いですになってしまいます。

ruby

1def kotaeawase 2 @font.put(@screen2,"数字を入力してください。",50,220,0,0,0) 3 refresh 4 a = STDIN.getch 5 @font.put(@screen2,"入力した数字",50,250,0,0,0) 6 @font2.draw_solid_utf8(@screen2," #{a}",190,242,0,0,0) 7 refresh 8 if a == $kotae.to_i 9 $tisiki = $tisiki.to_i + $score.to_i 10 @font.put(@screen2,"正解です",50,310,0,0,0) 11 refresh 12 sleep 2 13 # @font.put(@screen2,"正解は#{$kotae}です。",50,280,0,0,0) 14 @font2.draw_solid_utf8(@screen2," #{$kotae}",50,20,0,0,0) 15 refresh 16 else 17 @font.put(@screen2,"間違いです。",50,280,0,0,0) 18 refresh 19 sleep 2 20 #@font.put(@screen2,"正解は#{$kotae}です。",50,310,0,0,0) 21 @font2.draw_solid_utf8(@screen2," #{$kotae}",50,300,0,0,0) 22 refresh 23 end 24 end 25 26def start 27 @font.put(@screen2,"今から問題が出てきます。問題によって、スコアが異なります。",50,30,0,0,0) 28 @font.put(@screen2,"正解だと思う選択肢の番号のキーボードを押してください。",50,70,0,0,0) 29 @font.put(@screen2,"始めるにはスペースキーを押してください。",50,120,0,0,0) 30 refresh 31 while true do 32 while event = SDL::Event2.poll 33 case event 34 when SDL::Event2::Quit 35 exit 36 when SDL::Event2::KeyDown 37 if event.sym == SDL::Key::SPACE then 38 yomikomi 39 drawBack 40 mondaihyouji 41 refresh 42 kotaeawase 43 end 44 end 45 end 46 end 47 end 48 49 def mondaihyouji 50 @font.put(@screen2,"#{$mondai}", 50,20,0,0,0) 51 @font.put(@screen2,"#{$sentakusi1}", 50,50,0,0,0) 52 @font.put(@screen2,"#{$sentakusi2}", 50,80,0,0,0) 53 @font.put(@screen2,"#{$sentakusi3}", 50,110,0,0,0) 54 @font.put(@screen2,"#{$sentakusi4}", 50,140,0,0,0) 55 @font.put(@screen2,"#{$sentakusi5}", 50,170,0,0,0) 56 @font2.draw_solid_utf8(@screen2," #{$tisiki}",100,500,0,0,0) 57 end 58end 59

こんな感じの文です。
他の所ですべて実行させています。

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

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

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

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

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

guest

回答3

0

if a == $kotae.to_i
の文の前で, a の値, $kotae.to_i の値, a == $kotae.to_i の値を表示するプリント文をいれるか、
デバッガで値をしれべれば、何が起こっているかが判明すると思われます。

コードを掲載して QA サイトに投げて解決はできたかもしれませんが、今後の為にも、起こっている現象を自分で調べれる方法を取得することをお勧めします。
そして そうやってしらべた現象がなぜ起こるのか? が不明だったら、そのときにこそ QAサイトに質問をすると、効率がよいと思います。

投稿2016/07/23 04:14

katoy

総合スコア22324

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

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

yusuke.

2016/07/23 13:55

回答ありがとうございます。 現在どうすればいいかだけじゃなく今後こういう問題が起こった時の対処法まで教えていただき大変勉強になりました。 今後生かしていきたいと思います。
guest

0

ベストアンサー

SDL環境なのでもしかしたら違うかもしれませんが、getchの返り値は文字列なのではないでしょうか。

仮に「数値」だったとしても、それはおそらく「文字コード」になるので、結果の数値との単純比較では一致しません。

投稿2016/07/22 01:45

maisumakun

総合スコア145183

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

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

yusuke.

2016/07/22 01:46

なので$kotae.to_iの.to_iをなくすことで解決しました。
guest

0

getchで'1'が入力されると 0x31 の値が入っています。
文字列で判定するか、 $kotae.to_i したものに 0x30 を加算して比較してください。

投稿2016/07/22 01:45

moonphase

総合スコア6621

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

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

yusuke.

2016/07/22 01:47

回答ありがとうございます。 解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問