2017-02-14 20 views
0

Я новичок в консольном приложении, я обычно использую C# для Unity. Код действительно не работает, как я этого хочуОшибка при попытке сделать математическое уравнение

Да, я знаю, что использование Goto не очень хорошо. Но я не знаю альтернативы

У меня было [a = 2] [b = 3] и [ans = a + b], поэтому очевидный ответ - 5. Поэтому, когда вы ставите 5, он запускает оператор Else, который получив его неверным.

 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; 

ответ

1

Ваш user и ans не равны в своем коде, который почему ваш код переходит к ошибке. Причина, по которой они не равны, - это их Типы.

user является строка ans представляет собой целое

Таким образом, вы сравниваете «5» до 5, и которые не могут быть равны.

Преобразование одной из переменных, чтобы у вас был тот же тип.

Использовать user.Equals(ans.ToString()) в инструкции if или преобразовать строку в число (это лучшее решение IMO), поскольку оно также обрабатывает ситуацию, когда ввод не является числом). Как это:

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

, а затем comapare userAns к ans.