2016-10-14 10 views
1

私は電卓を書く方法について私のアイデアを開発してきましたが、毎回未処理の例外を残していますが、コードにエラーはありません。コードを何度も読んだ後、間違っている。この電卓コンソールアプリケーションが動作しない理由は何ですか?

コードが例外をスローし、あなたには何も告げず終了取得されていますが、あなたがコードをデバッグする場合ことを検出する可能性があるため、あなたは何も見えない
string inp; 
int location; 
double num1, num2, ans; 
string[] ops = {"+", "-", "*", "/" }; 

Console.WriteLine("Calculator"); 
Console.WriteLine("Enter a Calculation."); 
inp = Console.ReadLine(); 

if (inp.Contains(ops[0])) 
{ 
    location = inp.IndexOf("+"); 
    num1 = double.Parse(inp.Substring(0, location)); 
    num2 = double.Parse(inp.Substring(location +1)); 
    ans = num1 + num2; 
    Console.WriteLine("{0}+{2}={3}", num1, num2, ans.ToString("0.###")); 
} 
else if (inp.Contains(ops[1])) 
{ 
    location = inp.IndexOf("-"); 
    num1 = double.Parse(inp.Substring(0, location)); 
    num2 = double.Parse(inp.Substring(location +1)); 
    ans = num1 - num2; 
    Console.WriteLine("{0}-{2}={3}", num1, num2, ans.ToString("0.###")); 
} 
else if (inp.Contains(ops[2])) 
{ 
    location = inp.IndexOf("*"); 
    num1 = double.Parse(inp.Substring(0, location)); 
    num2 = double.Parse(inp.Substring(location +1)); 
    ans = num1 * num2; 
    Console.WriteLine("{0}*{2}={3}", num1, num2, ans.ToString("0.###")); 
} 
else if (inp.Contains(ops[3])) 
{ 
    location = inp.IndexOf("/"); 
    num1 = double.Parse(inp.Substring(0, location)); 
    num2 = double.Parse(inp.Substring(location +1)); 
    ans = num1/num2; 
    Console.WriteLine("{0}/{2}={3}", num1, num2, ans.ToString("0.###")); 
} 
+1

デバッガで実行しようとしましたか? –

+0

はい私は何も見せていません – Pavvel

+2

あなたはそれがうまくいかないという意味ですか?どのような例外がスローされますか?どのようなコード行が例外をスローしますか?また、サンプル入力を添付し、期待される結果 – Rumpelstinsk

答えて

5

;)

コードは、すべてのエラーを提示していません

コードはコンパイルエラーがないですが、あなたのコードは、実行時にエラーがgerenatingさ

あなたが

Console.WriteLine("{0}+{2}={3}", num1, num2, ans.ToString("0.###")); 

ためにこのラインの例外を持っている{0} + {2} = {3}{0} + {1} = {2}

ようでなければなりませんあなたはここでユーザーに結果を表示したときに、彼らは

num1, num2, ans.ToString("0.###") 
1

ごインデックス順で定義された配列にインデックスされているが間違っている: ます。Console.WriteLine( "{0} + {2} = {3}"、NUM1、 num2、ans.ToStri ng( "0。###"));

インデックス番号を0,1,2 ...に変更し、文字列の書式設定時に変数を取得します。私はこれを避けるために、あなたの+演算子の一部を更新22 + 66 + 88

:ユーザーは次のように複数の演算子を入力したときに

また、このコードは動作しません。これをチェックしてください。

 string inp; 
     int location; 
     double num1, num2, ans = 0.0; 
     string[] ops = { "+", "-", "*", "/" }; 
     string[] numbers; 
     string output; 
     Console.WriteLine("Calculator"); 
     Console.WriteLine("Enter a Calculation."); 
     inp = Console.ReadLine(); 

     if (inp.Contains(ops[0])) 
     { 
      numbers = inp.Split('+'); 
      output = ""; 
      for (int i = 0; i < numbers.Length; i++) 
      { 
       ans += Convert.ToDouble(numbers[i]); 
      } 



      Console.WriteLine("{0} = {1}", inp, ans.ToString("0.###")); 
      Console.ReadLine(); 
     } 
+0

あなたの答えは正しいですが、あなたはおそらくなぜOPに説明することができ、どのように修正することができますか? –

+0

@GeoffJamesが私の答えを更新しました。ありがとう。 – Badiparmagi

0

結果を書き出す際には、文字列をフォーマットするときに正しい構文を使用してください。

Console.WriteLine("{0}+{1}={2}", num1, num2, ans.ToString("0.###")); 
0

コードはコンパイルするのが正しいです。 最初に変更する必要があります Console.WriteLine( "{0} + {2} = {3}"、num1、num2、ans.ToString( "0。###")) To この変更後、Console.WriteLine( "{0} + {1} = {2}"、num1、num2、ans.ToString( "0。###")) コードは、2 + 8または3-8 多項式を計算するには、計算ストリングから 'num'値を取得するようにロジックを変更します。

関連する問題