无法使指数操作按钮在计算器中工作

时间:2018-11-02 15:42:31

标签: c#

我一直在研究计算器教程,尝试扩展到C#中,但遇到了麻烦。我无法使指数按钮正常工作。到目前为止,我设置的所有其他东西都可以正常工作(+,-,*,/),但是我已经从5到6个关于该主题的不同帖子中尝试了2种不同的方法,但似乎没有任何效果。问题似乎是在按钮级别存在断开连接,但是调用该操作的按钮编码与其他按钮完全相同,因此我不确定为什么它不起作用。我的第二次尝试是在下面。

namespace CS_Calculator
{
    public partial class calculatorform : form
    {
        string input = string.Empty;
        string operand1 = string.Empty;
        string operand2 = string.Empty;
        char operation;
        double result = 0.0;
        public calculatorform()
    {
        InitializeComponent();
    }

    private void btn_2_Click(object sender, EventArgs e)
        {   //Set button 2
            this.box_result.Text = "";
            input += "2";
            this.box_result.Text += input;
        }

    private void btn_3_Click(object sender, EventArgs e)
        {   //Set button 3
            this.box_result.Text = "";
            input += "3";
            this.box_result.Text += input;
        }

    private void btn_exp_Click(object sender, EventArgs e)
        {   //Codes Exponent button
            operand1 = input;
            operation = 'E';
            input = string.Empty;
        }

    private void btn_res_Click(object sender, EventArgs e)
        {   //Codes Return button 
            operand2 = input;
            double num1, num2;
            double.TryParse(operand1, out num1);
            double.TryParse(operand2, out num2);

            this.box_result.Text = "";
            this.input = string.Empty;
            this.operand1 = string.Empty;
            this.operand2 = string.Empty;

            if (operation == 'E')
            {
                double power = num2;
                for (int i = 1; i <= Math.Abs(power); ++i) ;
                    result *= num1;

                if (power > 0)
                    result = 1 / result;
                box_result.Text = result.ToString();
            }
        }
    }
}

尝试1:

if (operation == 'E')
{
    result = Math.Pow(num1,num2);
    box_result.Text = result.ToString();
}

顺便说一句,我对C#完全陌生,几乎不了解语法或流程。我对VBA最为熟悉,到目前为止,C#在几乎所有方面都感觉完全不同,因此请尽可能详细地解释您的答案,因为这将帮助我理解它们而不必提出太多后续问题。

1 个答案:

答案 0 :(得分:2)

您的第一次尝试由于循环而无法正常工作

for (int i = 1; i <= Math.Abs(power); ++i) ;
    result *= num1;

什么都不做。这是因为前面没有表达式的分号是不执行任何操作的操作。因此,在这种情况下,您应该删除分号:

for (int i = 1; i <= Math.Abs(power); ++i)
    result *= num1;

其他语句,例如ifwhilelock也是如此。他们所有人都希望标题后有一条语句,例如:

if (<expression>) <statement>
while (<expression>) <statement>
for (...) <statement>
lock (<expression>) <statement>

语句是不返回值的代码,可以是以下之一:

  • 以分号结尾的表达式(即返回值的代码):<expression> ;
  • 一个空语句(NO-OP),不执行任何操作:;
  • 复合语句,该语句按顺序执行几个语句:{ <statement> <statement> ... }
  • 其他一些语句,例如ifforwhile

您第一次尝试的另一个问题是result变量初始化为零。零乘以另一个数字当然保持为零。您应该使用1对其进行初始化,因为它是乘法的中性元素。