2017-02-09 46 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); 
     } 
    } 
} 

的問題是,這會導致9而不是3,其是應該輸出。如果我嘗試使用除法或乘法的完全相同的代碼,程序崩潰。看起來很奇怪,代碼完美地與加法一起工作。任何幫助?

+0

使用調試器,你會發現'num2'是*不*你認爲它是。它正確地減去'num1'和'num2'。 – Rob

回答

2

這是因爲這行:

string c2 = a.Substring(b); 

c2等於 「-3」 等轉換爲-36 - -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而不是3string 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