«Строка ввода была не в правильном формате» при попытке создать «меню» в консольном приложении Windows - PullRequest
0 голосов
/ 07 октября 2018

Я написал этот код для класса несколько дней назад.Все выглядит правильно, однако, когда я ввожу ввод, я сразу получаю ошибку.

Любая помощь по этому вопросу будет принята с благодарностью.

Console.WriteLine("The following are the benefit packages: ");
        Console.WriteLine("Employee only (E) ");
        Console.WriteLine("Employee and spouse (S) ");
        Console.WriteLine("Employee and children (C) ");
        Console.WriteLine("Employee and family (F) ");
        Console.WriteLine();
        Console.WriteLine("Please select your benefit type for medical insurance: ");
        string medical = Console.ReadLine();
        double subtotal = Convert.ToDouble(Console.ReadLine());
        ///the error is with the double above. I'm not sure how to work around this.
        if (medical == "e")
        {
            subtotal += 0;
        }else if (medical == "s")
        {
            subtotal += 50;
        }else if (medical == "c")
        {
            subtotal += 100;
        }else if (medical == "f")
        {
            subtotal += 200;
        }
        Console.WriteLine("Please select your benefit type for dental insurance: ");
        string dental = Console.ReadLine();
        if (dental == "e")
        {
            subtotal += 50;
        }else if (dental == "s")
        {
            subtotal += 125;
        }else if (dental == "c")
        {
            subtotal += 225;
        }else if (dental == "f")
        {
            subtotal += 325;
        }
        Console.WriteLine("Please select your benefit type for vision insurance: ");
        string vision = Console.ReadLine();
        if (vision == "e")
        {
            subtotal += 25;
        }else if (vision == "s")
        {
            subtotal += 60;
        }else if (vision == "c")
        {
            subtotal += 110;
        }else if (vision == "f")
        {
            subtotal += 185;
        }
        Console.WriteLine("Please enter your years in service: ");
        int years = Convert.ToInt16(Console.ReadLine());
        double discount = Convert.ToDouble(Console.ReadLine());
        if (years >= 20)
        {
            discount = .2;
        }else if (years >= 10 && years < 20)
        {
            discount = .1;
        }else if (years < 10)
        {
            discount = 0;
        }
        double total = subtotal + (subtotal * discount);
        Console.WriteLine("Your total out-of-pocket premium: " + total);
        Console.ReadLine();

Каждый раз, когда пользователь «выбирает» пакет, значение «промежуточного итога» будет увеличиваться.Позже рассчитывается итоговая сумма, которая дает пользователю окончательную стоимость этих премий.

1 Ответ

0 голосов
/ 07 октября 2018
string medical = Console.ReadLine();
double subtotal = Convert.ToDouble(Console.ReadLine());

это запрашивает два ввода, первый Console.ReadLine(); устанавливает вашу строку медицинской.это хорошо.

допустим, я ввожу E

теперь медицинский = "E"

сейчас, прежде чем он попадет в ваш цикл, чтобы определить, что делать с "E"msgstr ", вы запрашиваете другой ввод и пытаетесь преобразовать его в двойной.я бы изменил вторую строку:

 double subtotal = Convert.ToDouble(Console.ReadLine());

на

 double subtotal = 0.0;

это даст вам начальное значение.если вам известна «стоимость процедуры», которую, как я полагаю, вы удваиваете, вы можете установить ее на то, что хотите, но если вы хотите запросить значение, используйте:

double subtotal = double.Parse(System.Console.ReadLine());

и то, как ваши вариантынастроить ....

 Console.WriteLine("Employee only (E) ");
        Console.WriteLine("Employee and spouse (S) ");
        Console.WriteLine("Employee and children (C) ");
        Console.WriteLine("Employee and family (F) ");

будет побуждать людей вводить заглавные буквы.это нормально, но вы проверяете только нижний регистр, я предлагаю:

 if (vision == "e"||vision == "E")

РЕДАКТИРОВАТЬ: я забыл вам сказать, при работе с суммами в долларах, лучше всего использоватьdecimal не double.

...