【问题标题】:C# - How to validate the user input for a calculator if the user inputs a wrong input?C# - 如果用户输入错误,如何验证计算器的用户输入?
【发布时间】:2021-01-13 16:59:49
【问题描述】:

我正在用 c# 制作一个简单的计算器应用程序,我遇到了一个问题,如果用户输入例如“4**3”,程序就会崩溃。是否有任何方法可以验证输入,以便在用户输入无法计算的内容时进行标记?

string sum = textDisplay.Text;
DataTable dt = new DataTable();
var ans = dt.Compute(sum, "");

【问题讨论】:

  • 好的,添加try...catch
  • 一旦你有了一个操作符,只有当它是不同的时候才改变它。

标签: c# winforms calculator


【解决方案1】:

按照 Tim 的建议,使用 Try/Catch 块。显然,这会告诉您尝试后是否失败,但异常确实为您提供了一些信息:

string operation = "4**3";
DataTable dt = new DataTable();
try
{
    var ans = dt.Compute(operation, "");
    MessageBox.Show(ans.ToString());
}
catch (Exception ex)
{
    MessageBox.Show("Operation: " + operation + Environment.NewLine + ex.Message, "Operation Failed");
}  

以上产生:

如果您想在调用Compute() 之前知道它是否会失败,您必须编写自己的语法解析器...这有点否定了首先使用Compute() 的全部意义。

【讨论】:

  • 其实,一个正则表达式,它可以简单地检查数字之间是否连续有两个或多个运算符,是一种在调用Compute()之前捕获它的方法,但是是的,捕捉异常不需要任何工作。
  • @insane_developer 只取决于您的操作有多复杂。如果我们只有两个操作数,中间有一个运算符,那么这很容易。例如,如果我们得到更复杂的带括号的表达式,那么您的正则表达式将很快变得复杂。使用括号,允许重复,((5-4)*(1-5),并注意* 的左侧/右侧不再有任何数字。
  • 当然可以,但是在表达式中添加括号不会过于复杂。在括号的情况下,需要寻找定义明确的模式。不过,到目前为止,我会去防止不良形式。您可以争辩说,如果无论如何都必须有一个 try catch,那么您不妨完全依赖它。这都是有争议的,我猜。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
相关资源
最近更新 更多