2013-06-19 4 views
-2
int a = Convert.ToInt32(Convert.ToString(Text1.Text));//here is the exception i am getting. 
int b = Convert.ToInt32(Convert.ToString(Text1.Text)); 
char c = Convert.ToChar(Convert.ToString(Text1.Text)); 
int result = Convert.ToInt32(Convert.ToString(Text2.Text)); 

if (c == '+') 
{ 
    result = a + b; 
    Text2.Text += result; 
} 
else if (c == '-') 
{ 
    result = a - b; 
    Text2.Text += result; 
} 
else if (c == '/') 
{ 
    result = a/b; 
    Text2.Text += result; 
} 
else if (c == '*') 
{ 
    result = a * b; 
    Text2.Text += result; 
} 
else 
    return; 

"입력 문자열의 형식이 올바르지 않습니다"라는 형식 예외가 발생합니다. 나는 이것이 간단한 질문 인 것을 안다. 그러나 나는 어떤 곳이라도 대답을 얻지 않았다.한 텍스트 상자에 수식을 입력하고 그 결과를 다른 텍스트 상자에 표시합니다.

미리 감사드립니다.

+1

어느 선이 예외를 발생 참조하고, 원인이 입력은 무엇인가? – Blorgbeard

+0

예외 라인을 게시 할 수 있습니까? Answer –

+4

또한 TextBox의'.Text' 속성은 이미 문자열입니다.'Convert.ToString' 필요가 없습니다. 그리고 당신은 같은 것으로부터 a, b, c를로드하려고 시도하는 것처럼 보입니다 텍스트 상자? – Blorgbeard

답변

0

틀림없이 이것은 긍정적 인 것은 아니지만 양수이고 최대 3 자리 숫자에 대한 작업이 완료됩니다.

내가이 값 테스트 : 5+2 결과 10, 50*2 결과 100, 50*2+1 결과를 101

 string[] num = Regex.Split(textBox1.Text, @"\-|\+|\*|\/").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for numbers 
     string[] op = Regex.Split(textBox1.Text, @"\d{1,3}").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for mathematical operators +,-,/,* 
     int numCtr = 0, lastVal=0; // number counter and last Value accumulator 
     string lastOp = ""; // last Operator 
     foreach (string n in num) 
     { 
      numCtr++; 
      if (numCtr == 1) 
      { 
       lastVal = int.Parse(n); // if first loop lastVal will have the first numeric value 
      } 
      else 
      { 
       if (!String.IsNullOrEmpty(lastOp)) // if last Operator not empty 
       { 
        // Do the mathematical computation and accumulation 
        switch (lastOp) 
        { 
         case "+": 
          lastVal = lastVal + int.Parse(n); 
          break; 
         case "-": 
          lastVal = lastVal - int.Parse(n); 
          break; 
         case "*": 
          lastVal = lastVal * int.Parse(n); 
          break; 
         case "/": 
          lastVal = lastVal + int.Parse(n); 
          break; 

        } 
       } 
      } 
      int opCtr = 0; 
      foreach (string o in op) 
      { 
       opCtr++; 
       if (opCtr == numCtr) //will make sure it will get the next operator 
       { 
        lastOp = o; // get the last operator 
        break; 
       } 
      } 
     } 
     MessageBox.Show(lastVal.ToString()); 
+0

많이 고마워요 ... – user2499557

+0

고맙습니다 ... 그것은 하나의 입력에 효과가 있었지만 하나의 표현이 첫 번째 텍스트 상자에서 실행 된 후 여러 개의 입력을 찾고 있는데 다른 표현을 입력하고 얻을 수 있어야합니다. 표현과 출력 모두가 텍스트 상자에 표시되어야합니다 ... – user2499557

+0

당신을 환영합니다. 해피 코딩. 신의 축복. – Edper

3

첫째로, Convert.ToString(someString)은 쓸모가 없습니다. 두 번째로, 실제로 관련된 모든 부분을 얻으려면 Text1의 입력을 구문 분석해야합니다.

가장 간단한 방법은 몇 가지 구분하여 문자열을 분할하는 것입니다

string[] parts = Text1.Text.Split(' '); 
int a = Convert.ToInt32(parts[0]); 
int b = Convert.ToInt32(parts[2]); 
char c = parts[1][0]; 

이것은 (각 부분 사이에 정확히 하나 개의 공간) 형태 123 + 456의 모든 입력을 처리합니다. 마지막으로, 당신은 결과에 아무것도하지 않을거야 경우 Text2를 분석 아무 소용이

var match = Regex.Match(Text1.Text, @"^\s*(\d+)\s*([+/*-])\s*(\d+)\s*$"); 
if (match.Success) 
{ 
    int a = Convert.ToInt32(match.Groups[1].Value); 
    int b = Convert.ToInt32(match.Groups[3].Value); 
    char c = match.Groups[2].Value[0]; 
} 

없습니다 : 다른 방법으로는 정규 표현식을 사용할 수 있습니다.

+0

나는이 두 줄에 대한 예외를 얻고 있습니다 int = Convert.ToInt32 (Convert.ToString (Text1.Text)); int b = Convert.ToInt32 (Convert.ToString (Text1.Text)); – user2499557

+1

@ user2499557 내 대답보기. 내 코드를 사용하여 a, b 및 c를 얻습니다. –

+0

p.su.w.g 코드 이후에 조건이 충족되어야합니다. 그리고 if 조건에서 문자열을 text2.text에 할당하기 전에 문자열로 변환하는 것을 잊지 마십시오 – Jack

관련 문제