2012-07-10 133 views
0

我有一个非常烦人的问题,我一直在寻找无处不在找,但没有一个对我有意义。我最近才刚刚开始C#,所以如果它是一个愚蠢的错误,非常抱歉。计算器中的输入字符串格式不正确

我建立了一个计算器,我可以成功地做到这一点,但我希望它显示的操作,当用户点击它们。例如,当用户点击6按钮的时候,当他按下加号(+)按钮时,它在文本框然后中显示6,它应该显示[6 +],然后他按5例如,它看起来像这样在文本框[6 + 5]中。

现在,这是我的错误。我可以做所有上述工作,但是当我点击等号(=)按钮时,我得到一个错误。它说

“输入字符串格式不正确。”

它说的错误是这行代码:

decimal total = Convert.ToDecimal(LCD.Tag) + 
Convert.ToDecimal(LCD.Text); 

继承人我的代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Window : Form 
    { 

     bool pluss = false; 
     bool minuss = false; 
     bool multiplyy = false; 
     bool dividee = false; 

     public Window() 
     { 
      InitializeComponent(); 
     } 

     private void clear_Click(object sender, EventArgs e) 
     { 
      LCD.Text = ""; 
     } 

     private void dec_Click(object sender, EventArgs e) 
     { 
      if (LCD.Text.Contains(".")) 
      { 
       return; 
      } 
      else { 
       LCD.Text = LCD.Text + "."; 
      } 
     } 

     private void zero_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "0"; 
     } 

     private void one_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "1"; 
     } 

     private void two_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "2"; 
     } 

     private void three_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "3"; 
     } 

     private void four_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "4"; 
     } 

     private void five_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "5"; 
     } 

     private void six_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "6"; 
     } 

     private void seven_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "7"; 
     } 

     private void eight_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "8"; 
     } 

     private void nine_Click(object sender, EventArgs e) 
     { 
      LCD.Text = LCD.Text + "9"; 
     } 

     private void plus_Click(object sender, EventArgs e) 
     { 
      if (LCD.Text == "") 
      { 
       return; 
      }else{ 
       pluss = true; 
       LCD.Tag = LCD.Text; 
       LCD.Text = LCD.Text + " + "; 
      } 
     } 

     private void equal_Click(object sender, EventArgs e) 
     { 
      decimal total = Convert.ToDecimal(LCD.Tag) + Convert.ToDecimal(LCD.Text); 
      LCD.Text = total.ToString(); 
     } 
    } 
} 

我在等待某人的回应,我会如此感激,如果我得到一个修复。 谢谢。

+1

如果LCD.Text包含LCD.Text +“+”。它会失败! – c0deNinja 2012-07-10 22:32:53

+0

@Ed S. Convert.ToDecimal(“4 + 2”)将失败 – c0deNinja 2012-07-10 22:35:55

+0

@ c0deNinja:不,确实没有。也许你应该测试一下。现在,没有找到有效数字的单个“+”或多个数字(即“4 + 2”)当然会失败。 – 2012-07-10 22:36:29

回答

4

当你的程序崩溃:

  1. 中断调试程序。
  2. 检查LCD.TagLCD.Text的值。
  3. 中提琴,你一定会注意到格式错误。

我意识到这是一个实践项目,但这种来回的字符串操作并不是构建计算器的最佳方式。最好将显示与用来包含表达式树和值的数据结构(即用于执行实际计算的数据结构)分开。

0

您试图将包含“+”符号的字符串转换为十进制格式。

在应用程序中放置一些断点并检查它崩溃的位置,该值可能不会成为您期望的值。

+0

你假设类似'“0.12+”'将无法解析,但它不会。 – 2012-07-10 22:35:59

+0

@EdS:我指的是更多的东西:'1 + 2'。 – 2012-07-10 22:37:13

+0

是的,那当然会失败 – 2012-07-10 22:38:23

0

看看你给Convert.ToDecimal转换(LCD.Text)。它期望一个字符串格式的数字,但你传递的东西就像“1 + 2”,而不是。你必须自己评估表达式。

+0

好吧我在这里试图解决它,但我仍然不确定如何。 – Zana 2012-07-10 22:43:05

+0

你正在寻找的是一个表达式评估器。有些东西需要你1 + 2并返回结果3.你可以自己写或者在线找一个图书馆。看到这里的教程。 http://www.strchr.com/expression_evaluator – 2012-07-10 22:48:55