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

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

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

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Q&A

1回答

14406閲覧

VBで電卓。=後の計算が上手くいかない。

mbcajkt

総合スコア8

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

0グッド

0クリップ

投稿2015/09/01 13:25

VB・プログラミング初心者です。
練習でVBで電卓を作成してみています。
「数字ボタン0~9」+「演算子」+「数字ボタン0~9」+「=」でテキストボックスに結果を表示することはできますが、
「=」で計算結果を出した後、「計算結果」+「演算子」+「数字ボタン」+「=」で結果を表示しようとすると、前に計算した結果の最後の演算子を記憶したまま計算してしまうようで、
1+2-3=-1 は正しく結果が出るのですが、
1+2-3=-1+4=-5 になってしまいます。
ちなみに1+2×3=9+4=36 と+4が×4と計算されているようです。

色々考え試してみたのですが上手くいきません。
作成したコードを下記に記載します。
お知恵を御貸し頂ければ幸いです。

Public Class Dentaku

Dim ans As Single '演算子の前に入力された数値 Dim kei As Integer '計算式 Dim entstr As String '直前のボタンを記憶する変数 Dim num As Integer '演算子の後に入力された数値 '「1」ボタン Private Sub btn1_click(sender As Object, e As EventArgs) Handles Btn1.Click If entstr >= "0" And entstr <= "9" Then ' 直前の押されたのが数字ボタンのとき If LblAnser.Text.Length < 8 Then ' かつ、8桁未満の数値が入力されているとき LblAnser.Text = LblAnser.Text & "1" End If Else LblAnser.Text = "1" ' 直前の押されたのが数字以外のボタンのとき End If entstr = entstr & "1" End Sub '「2」ボタン Private Sub btn2_click(sender As Object, e As EventArgs) Handles Btn2.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "2" End If Else LblAnser.Text = "2" End If entstr = entstr & "2" End Sub '「3」ボタン Private Sub btn3_click(sender As Object, e As EventArgs) Handles Btn3.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "3" End If Else LblAnser.Text = "3" End If entstr = entstr & "3" End Sub '「4」ボタン Private Sub btn4_click(sender As Object, e As EventArgs) Handles Btn4.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "4" End If Else LblAnser.Text = "4" End If entstr = entstr & "4" End Sub '「5」ボタン Private Sub btn5_click(sender As Object, e As EventArgs) Handles Btn5.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "5" End If Else LblAnser.Text = "5" End If entstr = entstr & "5" End Sub '「6」ボタン Private Sub btn6_click(sender As Object, e As EventArgs) Handles Btn6.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "6" End If Else LblAnser.Text = "6" End If entstr = entstr & "6" End Sub '「7」ボタン Private Sub btn7_click(sender As Object, e As EventArgs) Handles Btn7.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "7" End If Else LblAnser.Text = "7" End If entstr = entstr & "7" End Sub '「8」ボタン Private Sub btn8_click(sender As Object, e As EventArgs) Handles Btn8.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "8" End If Else LblAnser.Text = "8" End If entstr = entstr & "8" End Sub '「9」ボタン Private Sub btn9_click(sender As Object, e As EventArgs) Handles Btn9.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "9" End If Else LblAnser.Text = "9" End If entstr = entstr & "9" End Sub '「0」ボタン Private Sub btn0_click(sender As Object, e As EventArgs) Handles Btn0.Click If entstr >= "0" And entstr <= "9" Then If LblAnser.Text.Length < 8 Then LblAnser.Text = LblAnser.Text & "0" End If entstr = entstr & "0" Else LblAnser.Text = "0" End If End Sub '+ボタン Private Sub Btn_Add_click(sender As Object, e As EventArgs) Handles Btn_Add.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 1 '加算 End Sub '-ボタン Private Sub Btn_Sub_click(sender As Object, e As EventArgs) Handles Btn_Sub.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 2 '減算 End Sub '*ボタン Private Sub Btn_Mult_click(sender As Object, e As EventArgs) Handles Btn_Mult.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 3 '乗算 End Sub '/ボタン Private Sub Btn_Division_click(sender As Object, e As EventArgs) Handles Btn_Division.Click If IsNumeric(entstr) = True Then 'entstrが数値の時trueを返します num = CSng(entstr) 'entstrをsingleに変換 Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select kei = 4 '除算 End Sub '=ボタン Private Sub Btn_Equal_click(sender As Object, e As EventArgs) Handles Btn_Equal.Click Dim num As Single If IsNumeric(entstr) = True Then num = CSng(entstr) Else Exit Sub End If entstr = "" Select Case kei Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 If num = 0 Then Exit Sub ans = ans / num Case Else ans = num End Select LblAnser.Text = CStr(ans) 'テキストボックスに結果を表示 End Sub 'C(クリア)ボタン Private Sub Btn_Clear_click(sender As Object, e As EventArgs) Handles Btn_Clear.Click LblAnser.Text = 0 kei = 0 entstr = "" ans = 0 End Sub

End Class

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

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

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

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

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

guest

回答1

0

演算子入力時の、keiに値を設定するタイミングをもう一度確認してみましょう。

1 + 2は
1に2を足す
のです。

今の処理だと
1を足して2
になっていませんか?

(ans=0,kei=0,entstr="")
1
(ans=0,kei=0,entstr="1") ここはok
+
(ans=0,kei=1,entstr="") ここでans=1,kei=1,entstr=""になってないとおかしい
2
(ans=0,kei=1,entstr="2")

(ans=2,kei=2,entstr="")
3
(ans=2,kei=2,entstr="3")

(ans=-1,kei=2,entstr="")
+
(ans=-1,kei=2,entstr="")
4
(ans=-1,kei=2,entstr="4")

(ans=-5,kei=2,entstr="")

投稿2015/09/01 13:39

編集2015/09/01 13:54
wakuwaku

総合スコア386

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問