Есть ли способ вместо того, чтобы сделать двойной не заморозить проект и вместо этого сказать неверное число? - PullRequest
0 голосов
/ 16 апреля 2020

Я новичок в переполнении стека, но столкнулся с проблемой. что я хочу сделать, так это продвинутый калькулятор, но не могу найти способ выдать сообщение об ошибке (тогда я добавлю параметр повтора) вместо остановки консоли.

            Console.Write("Type A Number: ");
            double num1 = Convert.ToDouble(Console.ReadLine());
            //detects numbers
            if (num1 != "1")
                Console.WriteLine("invalid number!");
            //detects numbers

            Console.Write("Type An Operator: ");
            string op = Console.ReadLine();

            Console.Write("Type Another Number: ");
            double num2 = Convert.ToDouble(Console.ReadLine());
            //the operator logic system!!!

оператор logi c система определяет, является ли оператор (+ - x / * / et c) действительным, но я не могу узнать номер. после этого я собираюсь сделать игру, но пока не могу найти эту.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Попробуйте это:

Console.Write("Type A Number: ");

if (!double.TryParse (Console.ReadLine(), out double num1))
     Console.WriteLine("invalid number!");

TryParse возвращает false, если введенный текст недействителен double. Если он действителен, он возвращает true и помещает число в num1.

0 голосов
/ 16 апреля 2020

Этот код вызывает проблемы, если пользователь вводит неожиданное значение. Например, они вводят строку вместо числа. Поэтому вам также нужно искать и учитывать это.

Лучше всего создавать различные методы, которые будут проверять ввод и возвращать только действительный результат, в противном случае, чтобы запросить пользователя. Итак, у вас есть что-то вроде этого;

Основной метод вызывает подметоды, поэтому он относительно прост. Вы вызываете GetValidNumber, чтобы вернуть числовые значения для номера 1 и номера 2 GetValidOperator, чтобы вернуть действительный оператор, который сам вызывает IsValidOperator, чтобы проверить правильность ввода (поскольку есть еще, что проверить).

Double.TryParse (...) - это основная проверка правильности введенного двойного числа. Но используя TryParese, он не будет исключением, если пользователь введет недействительный номер, а просто вернет false. Таким образом, в этом случае это безопасный способ проверки пользовательского ввода.

Код может нуждаться в уточнении и улучшении проверки ошибок, но это должно привести вас к правильному курсу.

static void Main(string[] args)
{
      double number1 = GetValidNumber("Enter first number");
      string op = GetValidOperator();
      double number2 = GetValidNumber("Enter second number");
      Console.WriteLine($"Operation is  {number1} {op} {number2}");
     //Add code to perform your operation
}


private static double GetValidNumber(string message)
{
      Console.WriteLine(message);
      string input = Console.ReadLine();
      double output;
      while (!Double.TryParse(input, out output) )
      {
          Console.WriteLine("Invalid number!  Please try again");
          input = Console.ReadLine();
      }
      return output;
  }

  private static string GetValidOperator()
  {
      Console.WriteLine("Enter an operator + - * / ");
      string input = Console.ReadLine();
      while (!IsValidOperator(input))
      {
          Console.WriteLine("Invalid Operator!  Please try again");
          input = Console.ReadLine();
      }
      return input;
  }

  private static bool IsValidOperator(string input)
  {
      bool result = false;
      if (String.IsNullOrWhiteSpace(input))
          return false;
      if (input.Length != 1)
          return false;
      if (input[0] == '+' || input[0] == '-' || input[0] == '/' || input[0] == '*')
          return true;
       else
          return result;
  }
0 голосов
/ 16 апреля 2020

Ну, вы можете использовать Double.Parse вместо Convert.ToDouble. Он выдаст исключение при неудачном преобразовании, и вы сможете справиться с этим.

...