Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t让指数运算按钮在计算器中工作_C# - Fatal编程技术网

C# Can';t让指数运算按钮在计算器中工作

C# Can';t让指数运算按钮在计算器中工作,c#,C#,我一直在学习一个计算器教程,试图扩展到C语言,但我遇到了一个障碍。我无法使“指数”按钮正常工作。到目前为止,我设置的所有其他方法都很好(+、-、*、/),但我从5或6篇关于这个主题的不同帖子中尝试了2种不同的方法,但似乎没有任何效果。问题似乎是在按钮级别有一个断开连接,但是调用操作的按钮编码与其他按钮完全相同,所以我不确定为什么它不工作。下面是我的第二次尝试 namespace CS_Calculator { public partial class calculatorform : f

我一直在学习一个计算器教程,试图扩展到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();
            }
        }
    }
}

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

您的第一次尝试无效,因为循环

for (int i = 1; i <= Math.Abs(power); ++i) ;
    result *= num1;
语句是不返回值的代码,可以是以下语句之一:

  • 以分号结尾的表达式(即返回值的代码):
  • 空语句(NO-OP),不执行任何操作:
  • 一种复合语句,按顺序执行多个语句:
    {…}
  • 其他一些语句,如
    if
    for
    while

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

您的第一次尝试不起作用,因为循环

for (int i = 1; i <= Math.Abs(power); ++i) ;
    result *= num1;
语句是不返回值的代码,可以是以下语句之一:

  • 以分号结尾的表达式(即返回值的代码):
  • 空语句(NO-OP),不执行任何操作:
  • 一种复合语句,按顺序执行多个语句:
    {…}
  • 其他一些语句,如
    if
    for
    while

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

你能扩展到“不能让它正常工作”吗。它是否没有运行事件处理程序代码?它给出了错误的结果吗?它是否抛出异常?还有别的吗?旁注:花点时间学习如何使用调试器是个好主意。它将是最有价值的工具(我在这里并不夸张)来掌握您的代码正在做什么,并帮助您验证关于它在每一步产生什么(中间)结果的假设。请看这里:道歉。我已经对代码进行了多次检查,当调用该操作时,代码就会停止。基本上,我输入第一个数字,按下指数按钮,什么也没发生。我不能再往前走了。“什么都没发生”你希望发生什么?在btn\u exp\u Click方法中是否有断点?断点是否处于活动/启用状态?您正在调试器中运行“调试生成”吗?我在
operan1=input处设置了一个断点。我不知道你说的“调试构建”是什么意思。这不是一个产品构建或任何东西,只是一个教程中的练习。对于“无任何变化”,基本上,当选择指数按钮时,应将结果框中的当前值写入操作数1,然后当输入第二个值时,该值应替换结果框中的值并成为操作数2。当我输入第二个值时,它会将其添加到结果框中的字符串中,而不是替换它。我认为,按钮被断开是根本问题。你能详细说明“无法使其正常工作”吗。它是否没有运行事件处理程序代码?它给出了错误的结果吗?它是否抛出异常?还有别的吗?旁注:花点时间学习如何使用调试器是个好主意。它将是最有价值的工具(我在这里并不夸张)来掌握您的代码正在做什么,并帮助您验证关于它在每一步产生什么(中间)结果的假设。请看这里:道歉。我已经对代码进行了多次检查,当调用该操作时,代码就会停止。基本上,我输入第一个数字,按下指数按钮,什么也没发生。我不能再往前走了。“什么都没发生”你希望发生什么?在btn\u exp\u Click方法中是否有断点?断点是否处于活动/启用状态?您正在调试器中运行“调试生成”吗?我在
operan1=input处设置了一个断点。我不知道你说的“调试构建”是什么意思。这不是一个产品构建或任何东西,只是一个教程中的练习。对于“无任何变化”,基本上,当选择指数按钮时,应将结果框中的当前值写入操作数1,然后当输入第二个值时,该值应替换结果框中的值并成为操作数2。当我输入第二个值时,它会将其添加到结果框中的字符串中,而不是替换它。我认为,断开按钮是根本的问题。此外,我假设不使用
Math.Pow(number,power)
函数是为了学习,这在任何情况下都会避免这种逻辑。感谢Cephus,这是一个完美的分解,很容易理解。我认为潜在的问题是调用指数计算的命令按钮在某种程度上是断开的,但我不确定如何断开,因为对象名称匹配,并且按钮本身的编码与其他操作符完全相同,这些操作符在
for (int i = 1; i <= Math.Abs(power); ++i)
    result *= num1;
if (<expression>) <statement>
while (<expression>) <statement>
for (...) <statement>
lock (<expression>) <statement>