Member 12784588 Ответов: 1

Предупредите пользователя, что другие типы данных (например, строка) были вставлены без сбоя


Я хочу, чтобы пользователь мог вводить только значения int из консоли, а именно: литр, длину и высоту. Предупредите пользователя о том, что были вставлены другие типы данных(например, строка), и попросите его повторить попытку. Проблема в том, что код выходит из строя, как только в любое из заданных значений вставляется значение, отличное от int. Есть какие-нибудь мысли о том, как это сделать?

Что я уже пробовал:

InterfaceClass для расчета. InterfaceClass имеет два метода calculateArea и totalCost
public interface ICalculation
               {int calculateArea();int totalCost()
}


Наследование класса интерфейса
Переменные-литр, длина, высота.
 public class Calculation : ICalculation
    {
        public int litre;
        public int length;
        public int height;
        public Calculation()
        {litre= 0;length = 0;height = 0;
  }

   public Calculation(int litre2, int lenght2, int height2)
   {
      this.litre = litre2;
      this.length = lenght2;
      this.height = height2;
   }

     public int calculateArea() {

        return length * height;
     }
     public int totalCost() {

        return calculateArea()* litre;
     }
}

Тестирование программы, чтобы увидеть результат. Создайте новый расчет объекта, а затем попросите пользователя заполнить литр, длину и высоту. Рассчитайте площадь и общую стоимость после получения значений.
class Tester
   {
       static void Main(string[] args)
       {

           Calculation c = new Calculation();


           try{
               Console.WriteLine("How much litre?");
               c.litre = int.Parse(Console.ReadLine());
               Console.WriteLine("What is the lenght");
               c.length = int.Parse(Console.ReadLine());
               Console.WriteLine("What is the height");
               c.height = int.Parse(Console.ReadLine());

               Console.WriteLine("The Total area " + c.calculateArea());
               Console.WriteLine("The Total cost for the project is " + c.totalCost());
               Console.ReadKey();
          }
          catch(FormatException ){
             Console.WriteLine("{0}is not an integer, try again!");
             // Console.ReadLine();
          }
      }
   }  
}

[no name]

Да. Не используйте int.Разобрать использовать int.Метод tryparse.

1 Ответов

Рейтинг:
5

Patrice T

Цитата:
Предупредите пользователя, что другие типы данных (например, строка) были вставлены без сбоя
У вас неверное представление о том, как осуществляется ввод данных пользователем.
Console.ReadLine() принимает пользовательский ввод в виде строки и только строки.
int.Parse преобразуйте содержимое строки и завершите работу программы, если она не удовлетворена содержимым строки.
int.TryParse говорит вам, был ли синтаксический анализ успешным, а не сбой.

Если вы хотите анализировать более сложные данные, вам придется изучить регулярные выражения.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]