2017-02-14 7 views
0

Ich bin neu in der Konsolenanwendung, ich verwende normalerweise C# für Unity. Der Code funktioniert nicht so wie ich es willFehler beim Versuch, mathematische Gleichung zu tun

Ja ich weiß, mit Goto ist nicht gut. Aber ich kenne keine Alternativen

Ich hatte [a = 2] [b = 3] und [ans = a + b], also ist die offensichtliche Antwort 5. Wenn Sie also 5 setzen, wird die Else-Anweisung ausgeführt es falsch zu bekommen.

 goto start; 
     error: 
     Console.Clear(); 
     Console.WriteLine("Input not Recognized"); 
     Console.WriteLine("Try Again"); 
     Console.WriteLine("\nType (Reset) to Reset Program"); 
     Console.WriteLine("\nType (End) to End Program"); 
     Console.WriteLine(""); 
     string error1 = Console.ReadLine(); 
     if (error1.Equals("reset", StringComparison.InvariantCultureIgnoreCase)) 
     { 
      goto start; 
     } 
     if (error1.Equals("end", StringComparison.InvariantCultureIgnoreCase)) 
     { 
      Environment.Exit(0); 
     } 
     else 
     { 
      goto error; 
     } 
     start: 
     Console.WriteLine("Solve the Math Equation"); 
     int a = 2; 
     int b = 3; 
     int ans = a + b; 
     Console.WriteLine("\n2 + 3"); 
     Console.WriteLine(""); 
     string user = ""; 
     ConsoleKeyInfo key; 

     do 
     { 
      key = Console.ReadKey(true); 
      if (key.Key != ConsoleKey.Backspace) 
      { 
       double val = 0; 
       bool _x = double.TryParse(key.KeyChar.ToString(), out val); 
       if (_x) 
       { 
        user += key.KeyChar; 
        Console.Write(key.KeyChar); 
       } 
      } 
      else 
      { 
       if (key.Key == ConsoleKey.Backspace && user.Length > 0) 
       { 
        user = user.Substring(0, (user.Length - 1)); 
        Console.Write("\b \b"); 
       } 
      } 
     } 
     while (key.Key != ConsoleKey.Enter); 
     if (user.Equals(ans)) 
     { 
      Console.Clear(); 
      Console.WriteLine("Correct!"); 
      Console.WriteLine("\nYour answer " + ans); 
      Console.WriteLine("\nType (End) to End Program"); 
      Console.WriteLine(""); 
      string end1 = Console.ReadLine(); 
      if (end1.Equals("end", StringComparison.InvariantCultureIgnoreCase)) 
      { 
       Environment.Exit(0); 
      } 
      else 
      { 
       goto error; 
      } 
     } 
     else 
      { 
       Console.Clear(); 
       Console.WriteLine("Incorrect!"); 
       Console.WriteLine("\nThe answer was " + ans); 
       Console.WriteLine("\nType (Reset) to Reset Program"); 
       Console.WriteLine("Type (End) to End Program"); 
       Console.WriteLine(""); 
       string rne1 = Console.ReadLine(); 
       if (rne1.Equals("reset", StringComparison.InvariantCultureIgnoreCase)) 
       { 
       Console.Clear(); 
        goto start; 
       } 
       if (rne1.Equals("end", StringComparison.InvariantCultureIgnoreCase)) 
       { 
        Environment.Exit(0); 
       } 
       else 
        goto error; 

Antwort

1

Ihre user und ans sind in Ihrem Code nicht gleich die, warum Ihr Code auf den Fehler springt. Der Grund, warum sie nicht gleich sind, sind ihre Typen.

user ist ein String ans eine ganze Zahl

So sind Sie "5" bis 5 zu vergleichen, und das kann nicht gleich sein.

Konvertieren Sie eine der Variablen, so dass Sie den gleichen Typ haben.

Verwenden Sie entweder user.Equals(ans.ToString()) in der if-Anweisung oder konvertieren Sie die Zeichenfolge in eine Zahl (das ist die bessere Lösung IMO - weil es auch die Situation behandelt, wenn die Eingabe keine Zahl ist). Wie folgt aus:

int userAns; 
if (!Int32.TryParse(user, userAnsj)) 
    Console.WriteLine("Input is not a valid integer."); 

und dann comapare userAns-ans.

Verwandte Themen