Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# 计算的守恒操作数_C#_C++_Visual Studio_Calculator - Fatal编程技术网

C# 计算的守恒操作数

C# 计算的守恒操作数,c#,c++,visual-studio,calculator,C#,C++,Visual Studio,Calculator,所以,这里是主要的想法,我想做一个计算器 private void _1_button_Click(object sender, RoutedEventArgs e) { resultBoxText += "1"; resultBox.Text = resultBoxText; } private void _2_button_Click(object sender, RoutedEventArgs e) { res

所以,这里是主要的想法,我想做一个计算器

private void _1_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "1";
        resultBox.Text = resultBoxText;
    }
    private void _2_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "2";
        resultBox.Text = resultBoxText;
    }
    private void _3_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "3";
        resultBox.Text = resultBoxText;
    }
    private void plus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "+";
        resultBox.Text = resultBoxText;
    }

    private void minus_button_Click(object sender, RoutedEventArgs e)
    {
        resultBoxText += "-";
        resultBox.Text = resultBoxText;
    }
上面的代码是用户在输入数字或操作数时使用的,文本框中的文本会发生变化。 现在,我如何进行实际计算?在单独的函数中(带参数)? 一个变量对所有操作数都足够吗?还是我应该创建一个数组? 随着输入的进行,我如何将它们添加到一起? 例:我先按“2”再按“+”再按“3”,如何在结果中收集它们?
我真的不知道如何开始:/

如果你只想加/减1,2,3,4,那么一个变量就足够了。只需在事件处理程序中正确地进行所有必要的计算。

我最近也尝试过做同样的事情。我提出了以下令人惊讶的简单解决方案。首先,添加对COM库的引用
MSScriptControl
()。然后,在所有数字按钮单击事件之后:

private void _1_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "1";
    resultBox.Text = resultBoxText;
}
private void _2_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "2";
    resultBox.Text = resultBoxText;
}
private void _3_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "3";
    resultBox.Text = resultBoxText;
}
private void plus_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "+";
    resultBox.Text = resultBoxText;
}

private void minus_button_Click(object sender, RoutedEventArgs e)
{
    resultBoxText += "-";
    resultBox.Text = resultBoxText;
}
为“等于”按钮添加一些代码:

private void equals_button_Click(object sender, RoutedEventArgs e)
{
    MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
    sc.Language = "VBScript";
    //Using try catch statement just in case a user enters an invalid expression. 
    //This becomes more useful when the application gets more advanced. 
    try
    {
        object result = sc.Eval(resultBoxText);
        //Output the result somehow. E.g.: resultBox.Text = result.ToString();
    }
    catch
    {
        MessageBox.Show("Invalid expression!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
仅此少量代码,就可以获取字符串,如“7*9-6+3/6”,并返回正确答案“57.5”。 然而,我必须提到的一件事是,它如何不能正确处理像“1(1)”这样的字符串。 从技术上讲,它应该将其视为“1*1”,但它只会引发一个错误。所以,我不得不做一些编码来解决这个问题。但当你走到桥边时,我会让你穿过那座桥……:)

我可以补充一点:如果你的数字按钮都包含简单的文本“1”或“2”或“+”,那么你可以大量压缩你的按钮点击

然后,对于所有的数字按钮,无论何时单击,都要将它们引用到数字按钮单击代码中。这也适用于所有操作员按钮(“+”)

另一方面,如果您的按钮包含“单击一个”之类的文本,则只需使用原始代码即可;别理我


我刚刚意识到你所有的点击事件都有
RoutedEventArgs
。你在用WPF吗?我以为是winforms。好吧,不管怎样,代码应该仍然有效。。。我希望这就是你要找的

哦,老兄。你在开一罐虫子。小贴士:把你自己限制在一个非常小的有效输入集开始(一个小语法)。你的意思是,我把这段代码缩短了?我的意思是,你应该首先把你的计算器限制在一个非常小的运算子集内。a+b,a-b,a*b,a/b可能。之后,您可以考虑解析带有括号和操作顺序的更复杂表达式。您是说您有一个字符串,比如说“2+3”,您想计算它吗?如果可能的话,这将是很酷的。好吧,我不仅要分析这些,这些只是开始。
private void num_button_click(object sender, RoutedEventArgs e)
{
    Button b = (Button)sender;
    resultBoxText += b.Text;
    resultBox.Text = resultBoxText;
}