2017-02-09 12 views
1

私は現在作成中の電卓の一部であるこのコードを持っています。減算、乗算、および除算スクリプトが正しく機能しない

class Program 
{ 
    static void Main(string[] args) 
    { 
     string a = "6-3";/*This is supposed to be entered in a textbox by a user*/ 

     int b = a.IndexOf(("-")); 

     string c = a.Substring(0, b); 

     int num1 = Convert.ToInt32(c); 

     int b2 = a.IndexOf(("-")); 
     string c2 = a.Substring(b); 
     int num2 = Convert.ToInt32(c2); 
     if(a.Contains("-")) 
     { 
      int an = num1 - num2; 
      string ans = Convert.ToString(an); 
      Console.WriteLine(ans); 
     } 
    } 
} 

問題は、出力すると想定される3の代わりに9になるという問題です。そして、私が除算または乗算で正確に同じコードを試すと、プログラムがクラッシュします。見た目が変わって奇妙なことに、コードは追加で完全に機能します。どんな助け?

+0

デバッガを使用して、あなたは 'num2'あなたはそれが何を考え* *ではありません見つけることができます。 'num1'と' num2'を正しく減算しています。 – Rob

答えて

2

を作ることがあるため、この行のためです:

string c2 = a.Substring(b); 

c2は "-3" であるので、-3に変換します。 6 - -3 9.

変更し、これに行です:

string c2 = a.Substring(b + 1); 

は、他の多くの問題があり、コードは深刻なリファクタリングを必要とするが、それは少しオフトピックです。

+0

偶然に間違った矢を打つ、謝罪する。 – Dispersia

+0

ありがとうございます!それは問題を解決します! – AlpHA

1

サブ文字列c2の場合、b1です。 "6-3".Substring(1)は-3を返します。 最初に入力する部分文字列パラメータは、どのくらい前に移動するかです。演算子を通過するには、インデックス+ 1を移動する必要があります。

これは、あなたの数学の問題6 - - 3

+0

ありがとうございました! – AlpHA

0

ではなく、-3という部分文字列を使用するためです。 string c2 = a.Substring(b);はこの短いバージョンは以下のようになりstring c2 = a.Substring(b+1);

次のようになります。

if(a.Contains("-")) 
{ 
    string[] nums = a.split('-') 
    Console.WriteLine(((int)nums[0]) - ((int)nums[1])) 
} 
+0

これはうまくいくはずですが、私のコードで言及したように、実際にはテキストボックスを使って作業していますので、文字列に変換することは不可欠です。 – AlpHA

関連する問題