2016-10-14 9 views
1

So habe ich meine Ideen entwickelt, wie man einen Taschenrechner schreibt und ich bekomme immer wieder eine unbehandelte Ausnahme, aber der Code zeigt keine Fehler, und nachdem ich den Code mehrmals gelesen habe, bin ich mir nicht sicher, was ist falsch machen.Irgendeine Idee, warum diese Rechner-Konsole-Anwendung nicht funktioniert?

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

Haben Sie versucht, es unter dem Debugger auszuführen? –

+0

Ja ich habe und nichts zeigte – Pavvel

+2

Was meinst du, es funktioniert nicht? Welche Ausnahme wird ausgelöst? Welche Codezeile löst die Ausnahme aus? Fügen Sie auch eine Beispieleingabe an, und das erwartete Ergebnis – Rumpelstinsk

Antwort

5

Sie sehen nichts, weil der Code eine Ausnahme auslöst und beendet zu werden, ohne dass Sie etwas zu sagen, aber man konnte das erkennen, wenn Sie den Code debuggen;)

der Code keine Fehler darstellen

der Code ist frei von Kompilieren Fehler aber Ihr Code gerenating einen Fehler zur Laufzeit

Sie haben eine Ausnahme, weil diese Linie

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

{0} + {2} = {3} muss {0} + {1} = {2}

als sie sind in einem Index von

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

Ihr Index definiert, um Array falsch ist, wenn Sie Ergebnis Benutzer zeigen hier: Console.WriteLine ("{0} + {2} = {3}", num1, num2, ans.ToStri ng ("0. ###"));

Ändern Sie Ihre Indexnummer auf 0, 1, 2 ... und geht auf Ihre Variablen, wenn Sie eine Zeichenfolge formatieren.

Auch dieser Code funktioniert nicht, wenn Benutzer wie mehr als einen Bediener gibt: 22 + 66 + 88

i Ihren + Operator Teil aktualisiert, dies zu vermeiden. check das aus.

 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

Ihre Antwort ist richtig - aber könnten Sie dem OP vielleicht erklären, warum und wie sie es beheben können? –

+0

@GeoffJames hat meine Antwort aktualisiert. Vielen Dank. – Badiparmagi

0

Wenn Sie Ihr Ergebnis schreiben, stellen Sie sicher, dass Sie beim Formatieren der Zeichenfolge die korrekte Syntax verwenden.

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

Code ist korrekt zu kompilieren. aber es hat einige logische Fehler- Zuerst muss geändert werden Console.WriteLine ("{0} + {2} = {3}", num1, num2, ans.ToString ("0. ###")) zu Console.WriteLine ("{0} + {1} = {2}", num1, num2, ans.ToString ("0. ###")) Nach dieser Änderung funktioniert der Code für einen einzelnen Ausdruck wie 2+ 8 oder 3-8 Für multicalculation ändern Sie Ihre Logik, um 'num' Wert aus der Berechnungszeichenfolge zu erhalten.

Verwandte Themen