C#语言,计算器 [英] C# language, Calculator

查看:103
本文介绍了C#语言,计算器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,谢谢您的帮助。

Hello everyone and thanks for helping me.

我用C#制作了这个计算器,但遇到了一个问题。
当我添加5 + 5 + 5之类的东西时,它会给我正确的结果,但是当我要减去两个以上的数字并除以或乘以两个以上的数字时,我不会得到正确的结果。

I made this calculator in C# and i got one problem. When i add something like 5+5+5 it gives me correct result but when i want to substract more than two number and also divide or multiply more than two number i don't get correct result.

您知道我在做什么吗

非常感谢!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace calculator
{
    public partial class Calculator : Form
    {
        public Calculator()
        {
            InitializeComponent();
        }

        private void btnOne_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnOne.Text;
            //txtDisplay.Text = btnOne.Text;
        }

        private void btnTwo_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnTwo.Text;
        }

        private void btnThree_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnThree.Text;
        }

        private void btnFour_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnFour.Text;
        }

        private void btnFive_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnFive.Text;
        }

        private void btnSix_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnSix.Text;
        }

        private void btnSeven_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnSeven.Text;
        }

        private void btnEight_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnEight.Text;
        }

        private void btnNine_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnNine.Text;
        }

        private void btnZero_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + btnZero.Text;
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtDisplay.Clear();
        }

        private void btnPoint_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + ",";
        }


        double total1 = 0;
        double total2 = 0;

        bool plusButtonClicked = false;
        bool minusButtonClicked = false;
        bool divideButtonClicked = false;
        bool multiplyButtonClicked = false;

        private void btnPlus_Click(object sender, EventArgs e)
        {
            plusButtonClicked = true;
            minusButtonClicked = false;
            divideButtonClicked = false;
            multiplyButtonClicked = false;

            total1 = total1 + double.Parse(txtDisplay.Text);
            txtDisplay.Clear();
        }

        private void btnMinus_Click(object sender, EventArgs e)
        {
            plusButtonClicked = false;
            minusButtonClicked = true;
            divideButtonClicked = false;
            multiplyButtonClicked = false;

            total1 = total1 + double.Parse(txtDisplay.Text);
            txtDisplay.Clear();
        }



        private void btnDivide_Click(object sender, EventArgs e)
        {
            total1 = total1 + double.Parse(txtDisplay.Text);
            txtDisplay.Clear();

            plusButtonClicked = false;
            minusButtonClicked = false;
            divideButtonClicked = true;
            multiplyButtonClicked = false;
        }

        private void btnMultiply_Click(object sender, EventArgs e)
        {
            total1 = total1 + double.Parse(txtDisplay.Text);
            txtDisplay.Clear();

            plusButtonClicked = false;
            minusButtonClicked = false;
            divideButtonClicked = false;
            multiplyButtonClicked = true;
        }



        private void btnEquals_Click(object sender, EventArgs e)
        {

            if (plusButtonClicked == true)
            {
                total2 = total1 + double.Parse(txtDisplay.Text);
            }

            else if (minusButtonClicked == true)
            {
                total2 = total1 - double.Parse(txtDisplay.Text);
            }

            else if (divideButtonClicked == true)
            {
                total2 = total1 / double.Parse(txtDisplay.Text);
            }

            else if (multiplyButtonClicked == true)
            {
                total2 = total1 * double.Parse(txtDisplay.Text);
            }


            txtDisplay.Text = total2.ToString();
            total1 = 0;
        }




    }
}


推荐答案

此代码尚未经过全面测试。为什么不尝试以下操作:

This code is has not been thoroughly tested. Why don't you try something like the following:

using System;
using System.Windows.Forms;

namespace Calculator
{
    public enum Operator
    {
        None,
        Add,
        Minus,
        Divide,
        Multiply
    }

    public partial class Calculator : Form
    {
        private double total = 0;
        private double currentValue = 0;
        private Operator currentOperator;

        public Calculator()
        {
            InitializeComponent();
        }

        private void btnOne_Click(object sender, EventArgs e)
        {
            ShowInput(btnOne.Text);
        }

        private void btnTwo_Click(object sender, EventArgs e)
        {
            ShowInput(btnTwo.Text);
        }

        private void btnThree_Click(object sender, EventArgs e)
        {
            ShowInput(btnThree.Text);
        }

        private void btnFour_Click(object sender, EventArgs e)
        {
            ShowInput(btnFour.Text);
        }

        private void btnFive_Click(object sender, EventArgs e)
        {
            ShowInput(btnFive.Text);
        }

        private void btnSix_Click(object sender, EventArgs e)
        {
            ShowInput(btnSix.Text);
        }

        private void btnSeven_Click(object sender, EventArgs e)
        {
            ShowInput(btnSeven.Text);
        }

        private void btnEight_Click(object sender, EventArgs e)
        {
            ShowInput(btnEight.Text);
        }

        private void btnNine_Click(object sender, EventArgs e)
        {
            ShowInput(btnNine.Text);
        }

        private void btnZero_Click(object sender, EventArgs e)
        {
            ShowInput(btnZero.Text);
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            currentOperator = Operator.None;
            txtDisplay.Clear();
            total = 0;
        }

        private void btnPoint_Click(object sender, EventArgs e)
        {
            txtDisplay.Text = txtDisplay.Text + '.';
        }

        private void btnPlus_Click(object sender, EventArgs e)
        {
            ApplyOperator(Operator.Add);
        }

        private void btnMinus_Click(object sender, EventArgs e)
        {
            ApplyOperator(Operator.Minus);
        }

        private void btnDivide_Click(object sender, EventArgs e)
        {
            ApplyOperator(Operator.Divide);
        }

        private void btnMultiply_Click(object sender, EventArgs e)
        {
            ApplyOperator(Operator.Multiply);
        }

        private void btnEquals_Click(object sender, EventArgs e)
        {
            Evaluate();
            txtDisplay.Text = Convert.ToString(total);
        }

        private void Evaluate()
        {
            switch (currentOperator)
            {
                case Operator.Add:
                    total += currentValue;
                    break;
                case Operator.Minus:
                    total -= currentValue;
                    break;
                case Operator.Divide:
                    total /= currentValue;
                    break;
                case Operator.Multiply:
                    total *= currentValue;
                    break;
                case Operator.None:
                    break;
            }
            currentValue = 0;
            currentOperator = Operator.None;
        }

        private void ApplyOperator(Operator op)
        {
            if (currentOperator != Operator.None)
            {
                Evaluate();
            }
            else
            {
                total = double.Parse(txtDisplay.Text);
            }
            txtDisplay.Clear();
            currentOperator = op;
        }

        private void ShowInput(String n)
        {
            txtDisplay.Text = txtDisplay.Text + n;
            currentValue = double.Parse(txtDisplay.Text);
        }
    }
}

我仍然建议您最终将产生某种形式的运算符解析器。看看此处,或者自己查看分流场算法。

I would still recommend that you would end up making some form of operator parser. Take a look here or look in to the 'Shunting Yard' algorithm yourself.

这篇关于C#语言,计算器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆