C#的强制转化“输入的字符串格式不正确”

菜鸟脱贫户 2020-12-26 05:40:39
制作简单计算器时用了老师讲的基于C++的数据结构的思想,但是在编程的时候出现了 这样的错误


private void btn_右括号_Click(object sender, EventArgs e)
{
textBox1.Text += ")";

bool flag = true;
OPND.Push(txtDisplay.Text);
txtDisplay.Text = "";
op2 = ")";
while (flag)
{
if (OPND.Count >= 2)
{

op1 = Convert.ToString(OPTR.Pop());

if (Isp(op1) > Icp(op2))
{
num2 = Convert.ToDouble(OPND.Pop());
num1 = Convert.ToDouble(OPND.Pop());
if (op1 == "+")
{
tempresult = num1 + num2;
}
else if (op1 == "-")
{
tempresult = num1 - num2;
}
else if (op1 == "×")
{
tempresult = num1 * num2;
}
else if (op1 == "÷")
{
tempresult = num1 / num2;
}
OPND.Push(Convert.ToString(tempresult));
}
else if (Isp(op1) == Icp(op2) )
{
flag = false;
}
}

这是运行出错的地方,在点击右括号后再按等号就出现这种错误。
因为没学过C#,只学了C++,在网上找了半天,图书馆查书找也没找到解决方法。
但是别的地方的强制转化是没有问题的,只有自己计算的结果再Push到栈后再Pop后强制转化就出现这种问题

希望各位大佬为我这小白解决这个小问题。

...全文
11266 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟脱贫户 2020-12-31
  • 打赏
  • 举报
回复
OPTR 里是运算符字符串
菜鸟脱贫户 2020-12-31
  • 打赏
  • 举报
回复
已解决。问题是在text 文本框中在按运算符时在栈里压了空字符串。这个地方要不是问老师我好难想到。
  • 打赏
  • 举报
回复
而你这个问题,我觉得你更应该打断点看看具体的字符串格式是怎样的,是不是没处理好
  • 打赏
  • 举报
回复
如果是单纯解决转换异常报错的问题的话,直接try catch捕获异常,当然也可以单单用double.TryParse()
xuzuning 2020-12-28
  • 打赏
  • 举报
回复
你能告诉我们 OPTR 里都是些什么吗?
菜鸟脱贫户 2020-12-27
  • 打赏
  • 举报
回复
引用 1 楼 xiaoliangoo 的回复:
push一次pop两次当然报错
不是的,我上面有判断,如果栈中有两个元素及以上才会执行那段代码。
引用 2 楼 luj_1768 的回复:
我觉得你应该好好观察一下真实的计算器,顺便试着操作一下。如果你想制作一个公式编辑器,算法会比较复杂。另外,听说有个函数叫parse(); 你可以看一下用法,可能会对你有帮助。
非常感谢,今天上午又查了,学到了,但是问题还是不能解决
luj_1768 2020-12-27
  • 打赏
  • 举报
回复
我觉得你应该好好观察一下真实的计算器,顺便试着操作一下。如果你想制作一个公式编辑器,算法会比较复杂。另外,听说有个函数叫parse(); 你可以看一下用法,可能会对你有帮助。
xiaoliangoo 2020-12-26
  • 打赏
  • 举报
回复
push一次pop两次当然报错

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧