2012-07-10 5 views
0

나는 매우 귀찮은 문제가있어서 어디서나 찾을 수 있지만 그 중 아무 것도 나에게 의미가 없습니다. 나는 최근에 C#을 시작 했으므로 어리석은 실수라면 미안하다.계산기의 입력 문자열 형식이 올바르지 않습니다.

필자는 계산기를 만들었고 성공적으로 만들었지 만 사용자가 클릭 할 때 작업을 표시하려고합니다. 예를 들어, 사용자가 물론 6 버튼을 클릭하면 텍스트 필드 에 6이 표시되고 더하기 (+) 버튼을 누르면이 표시되고 [6+]가 표시되고 예를 들어 5를 누르면 다음과 같이 표시됩니다 텍스트 필드에서 [6 + 5].

이제 내 오류가 있습니다. 위의 모든 작업을 수행 할 수 있지만 같음 (=) 단추를 클릭하면 오류가 발생합니다. 그것은 말합니다

"입력 문자열이 올바른 형식이 아닙니다."

그것은 오류가이 코드 라인에 말한다 :

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

Heres는 내 코드 :

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

누군가의 반응을 기다리고 그리고 난 내가 얻는 경우에 매우 greatful 수 있습니다 수정. 감사합니다. .

+1

그것은 실패 할 것이다! – c0deNinja

+0

@Ed S. Convert.ToDecimal ("4 + 2")는 실패합니다 – c0deNinja

+0

@ c0deNinja : 아니요. 아마 당신은 그것을 테스트해야합니다. 이제 유효한 숫자가없는 단일 "+"또는 여러 개의 숫자 (즉, "4 + 2")가 실패합니다. –

답변

4

프로그램이 충돌 할 때 : 디버거에

  1. 휴식.
  2. LCD.TagLCD.Text의 값을 검사하십시오.
  3. 비올라, 당신은 틀림없이 형식이 잘못되었다는 것을 알게 될 것입니다.

실습 프로젝트이지만이 종류의 문자열 조작으로 앞뒤로 계산기를 만드는 것이 최선의 방법은 아닙니다. 표현 트리 및 값 (즉, 실제 계산을 수행하는 데 사용 된 데이터 구조)을 포함하는 데 사용 된 데이터 구조에서 디스플레이를 분리하는 것이 더 좋습니다.

0

"+"기호가 포함 된 문자열을 10 진수 형식으로 변환하려고합니다.

응용 프로그램에 일부 중단 점을 놓고 충돌이 발생한 곳을 검사하면 값이 예상 한 값과 다를 수 있습니다.

+0

''0.12+ ''와 같이 구문 분석에 실패한다고 가정하고 있지만 그렇지 않습니다. –

+0

@EdS : 나는 "1 + 2"의 행을 따라 더 많은 것을 언급하고있었습니다. –

+0

예, 물론 그럴 것입니다 –

0

Convert.ToDecimal (LCD.Text)으로 바꾸고 자하는 것을보세요. 문자열 형식의 숫자가 필요하지만 "1 + 2"과 같이 전달됩니다. 직접 표현을 평가해야합니다. LCD.Text에 LCD.Text + "+"가 포함 된 경우

+0

그래, 여기 그것을 수정하려고하는 메신저지만, 나는 꽤 확실하지 않습니다. – Zana

+0

당신이 찾고있는 것은 표현식 평가 기입니다. 당신의 1 + 2를 취하고 그 결과를 돌려주는 어떤 것 3. 당신 자신의 것을 쓰거나 온라인으로 도서관을 찾을 수 있습니다. 튜토리얼은 여기를 참조하십시오. http://www.strchr.com/expression_evaluator –

관련 문제