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;
}