-2

Operation error when two operations are clicked, i want error handling to take place so i cant put multiple * in a row

namespace Calculator_Assignment
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        float num, ans;
        int count;
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void Button_click(object sender, EventArgs e)
        {
            Button button = (Button)sender;          //adds the numbers into the screen when clicked
            Screen.Text = Screen.Text + button.Text;
            Screen.ForeColor = Color.Red; //text that entered appears red

        }

        private void operatorclick(object sender, EventArgs e)
        {
            Button button = (Button)sender;            //adds the symbols into the screen when clicked
            Screen.Text = Screen.Text + button.Text;  //all symbols are under button_click so i do not have to repeat the code over/
        }

        private void Clearclick(object sender, EventArgs e)
        {
            Screen.Clear(); //when clicked clears the screen
            Result.Clear(); //when clicked clears the result 

        }

        private void Decimalclick(object sender, EventArgs e)
        {
            Screen.Text = Screen.Text + "."; //adds decimal point to screen when/if clicked 
            Screen.ForeColor = Color.Red; //decimal point appears red


        }

        private void Closebtn_Click(object sender, EventArgs e)
        {
            this.Close(); // closes the application down 
        }

        private void plusclick(object sender, EventArgs e) //addition
        {

            num = float.Parse(Screen.Text);
            Screen.Clear(); //clears the screen of everything
            Screen.Focus(); //textbox is focused upon when the screen is cleared
            count = 1; //this counts the store case
            Screen.Text = num.ToString() + "+"; //this puts the text onto the top text box


        }

        private void multiplyclick(object sender, EventArgs e) //multiply 
        {
            num = float.Parse(Screen.Text);
            Screen.Clear(); //clears the screen of everything
            Screen.Focus(); //textbox is focused upon when the screen is cleared
            count = 3; //this counts the store case
            Result.Text = num.ToString() + "*"; //this puts the text onto the top textbox          
        }

        private void divideclick(object sender, EventArgs e)  //divide
        {
            num = float.Parse(Screen.Text);
            Screen.Clear(); //clears the screen of everything
            Screen.Focus(); //textbox is focused upon when the screen is cleared
            count = 4; //this counts the store case
           Screen.Text = num.ToString() + "/"; //this puts the text onto the 
        }

        private void subtractclick(object sender, EventArgs e) //subtract
        {
            num = float.Parse(Screen.Text);
            Screen.Clear(); //clears the screen of everything
            Screen.Focus(); //textbox is focused upon when the screen is cleared
            count = 2; //this counts the store case
           Result.Text = num.ToString() + "-"; //this puts the text onto the label
        }

        private void equalsclick(object sender, EventArgs e)
        {          
            switch (count) //initalising switch statement 
            {
                case 1:
                     ans = num + float.Parse(Screen.Text);//Adding numbers 
                    Result.Text = ans.ToString();         //this converts my answer from a float to a string
                    break;
                case 2:
                    ans = num - float.Parse(Screen.Text); //Subtracting numbers
                    Result.Text = ans.ToString();         //float to a string 
                    break;
                case 3:
                    ans = num * float.Parse(Screen.Text);  //Multiplying numbers
                    Result.Text = ans.ToString();          //float to a string 
                    break;
                case 4:
                    ans = num / float.Parse(Screen.Text); //Division of numbers
                    Result.Text = ans.ToString();         //float to a string
                    break;
                default:                                  //the default figure
                    break;         
            }






        }







        }
    }
HaveNoDisplayName
  • 7,711
  • 106
  • 32
  • 44

1 Answers1

0

Quick solution:

Create a method called void AppendOperator(string operator)

This method should check the previous character before appending it. If the previous character is an operator then simply return.

Call this new method in place of all the locations where you assign a value to Result.Text

AppendOperator implementation example:

    private readonly HashSet<char> _operators = new HashSet<char>() { '+', '*', '-', '/' };

    void AppendOperator(string operation)
    {
        char lastChar = Result.Text.LastOrDefault();
        if (_operators.Contains(lastChar)) return;

        Result.Text = num.ToString() + operation;
    }
AJ X.
  • 2,470
  • 1
  • 18
  • 28