Руководство. Создание простого консольного приложения C# в Visual Studio (часть 1 из 2)
В этом руководстве вы используете Visual Studio для создания и запуска консольного приложения C# и изучения некоторых функций интегрированной среды разработки Visual Studio (IDE). Это руководство является первой частью двухчастного цикла руководств.
В этом руководстве вы выполните следующие задачи:
- Создайте проект Visual Studio.
- Создайте консольное приложение C#.
- Отладка приложения.
- Закройте приложение.
- Проверьте полный код.
В части 2 этого руководствавы расширяете это приложение, чтобы добавить дополнительные проекты, научиться выполнять отладку и ссылаться на пакеты, отличные от Майкрософт.
Необходимые условия
Необходимо установить Visual Studio.
Если у вас нет Visual Studio, перейдите к загрузкам Visual Studio, чтобы установить его бесплатно.
Создание проекта
Чтобы начать, создайте проект приложения C#. Тип проекта поставляется со всеми нужными файлами шаблонов.
Откройте Visual Studio и выберите Создать проект в окне запуска.
В окне Создание проекта выберите C# из раскрывающегося списка языков. Выберите Windows из списка платформ и Console из списка типов проектов.
После применения фильтров языков, платформы и типов проекта выберите шаблон Консольное приложение, а затем нажмите Далее.
Заметка
Если шаблон консольного приложения не отображается, выберите Установить дополнительные средства и компоненты.
В установщике Visual Studio выберите компонент .NET Core для кроссплатформенной разработки.
Выберите Изменить в установщике Visual Studio. Возможно, вам будет предложено сохранить вашу работу. Выберите Продолжить, чтобы установить рабочую нагрузку.
Вернитесь ко второму шагу в процедуре создания проекта.
В окне Настройка нового проекта введите Калькулятор в поле имени проекта. Затем нажмите Далее.
В окне Дополнительные сведения убедитесь, что .NET Core 3.1 появится в поле целевой платформы. Затем выберите Создать.
Visual Studio открывает новый проект, который включает в себя код Hello World по умолчанию. Чтобы просмотреть его в редакторе, выберите файл кода Program.cs в окне обозревателя решений, который обычно находится в правой части Visual Studio.
По умолчанию код Hello World вызывает метод WriteLine для отображения литеральной строки Hello, World! в окне консоли. Если нажать клавишу F5, можно запустить программу по умолчанию в режиме отладки. После запуска приложения в отладчике окно консоли остается открытым. Нажмите любую клавишу, чтобы закрыть окно консоли.
Откройте Visual Studio и выберите Создать проект в окне запуска.
В окне Создание проекта выберите C# из раскрывающегося списка языков. Выберите Windows из списка платформ и консоль из списка типов проектов.
После применения фильтров языка, платформы и типа проекта выберите шаблон Console App, а затем выберите Далее.
Заметка
Если шаблон консольного приложения не отображается, выберите Установить дополнительные средства и компоненты.
В установщике Visual Studio выберите рабочую нагрузку разработки для настольных компьютеров .NET.
Выберите Изменить в установщике Visual Studio. Возможно, вам будет предложено сохранить вашу работу. Выберите Продолжить, чтобы установить рабочую нагрузку.
Вернитесь к шагу 2 в этом создание процедуры проекта.
В окне Настройка нового проекта введите калькулятор в поле Имя проекта, а затем выберите Далее.
В окне Дополнительные сведения выберите .NET 8.0 для поля целевой платформы. Затем выберите Создать.
Visual Studio открывает новый проект, который включает в себя код Hello World по умолчанию. Чтобы просмотреть его в редакторе, выберите файл кода Program.cs в окне обозревателя решений, который обычно находится в правой части Visual Studio.
Одна инструкция кода вызывает метод WriteLine для отображения литеральной строки Hello, World! в окне консоли. Если нажать клавишу F5, можно запустить программу по умолчанию в режиме отладки. После запуска приложения в отладчике окно консоли остается открытым. Нажмите любую клавишу, чтобы закрыть окно консоли.
Заметка
Начиная с .NET 6, новые проекты с помощью шаблона консоли создают код, отличный от предыдущих версий. Дополнительные сведения см. в статье Новые шаблоны C# генерируют инструкции верхнего уровня.
Создание приложения
В этом разделе вы выполните следующие задачи:
- Ознакомьтесь с некоторыми основными целыми числами в C#.
- Добавьте код для создания базового приложения калькулятора.
- Отладка приложения для поиска и исправления ошибок.
- Уточняйте код, чтобы сделать его более эффективным.
Изучение целочисленной математики
Начните с некоторой базовой целочисленной математики в C#.
В правой области выберите Program.cs, чтобы отобразить файл в редакторе кода.
В редакторе кода удалите код по умолчанию Hello World.
В частности, удалите строку, где написано
Console.WriteLine("Hello World!");
.На его месте введите следующий код:
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
Обратите внимание, что при вводе кода функция IntelliSense в Visual Studio предлагает возможность автозавершения записи.
Нажмите зеленую кнопку "Пуск" рядом с калькулятора, чтобы создать и запустить программу, или нажмите клавишу F5.
Откроется окно консоли, которое показывает сумму 42 + 119, которая 161.
(необязательно) можно изменить оператор, чтобы изменить результат. Например, можно изменить оператор
+
в строке кодаint c = a + b;
на-
для вычитания,*
для умножения или/
деления. Затем, когда вы запускаете программу, результат также изменяется.Закройте окно консоли.
В обозревателе решенийв правой области выберите Program.cs, чтобы отобразить файл в редакторе кода.
В редакторе кода замените код по умолчанию Hello World, который говорит
Console.WriteLine("Hello World!");
.Замените строку следующим кодом:
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
Если ввести код, функция IntelliSense Visual Studio предлагает возможность автозавершения записи.
Чтобы создать и запустить приложение, нажмите клавишу F5или щелкните зеленую стрелку рядом с именем Калькулятор на верхней панели инструментов.
Откроется окно консоли, в котором отображается сумма 42 + 119, которая 161.
Закройте окно консоли.
(необязательно) можно изменить оператор, чтобы изменить результат. Например, можно изменить оператор
+
в строке кодаint c = a + b;
на-
для вычитания,*
для умножения или/
деления. При запуске приложения результат изменяется соответствующим образом.
Добавление кода для создания калькулятора
Продолжайте добавление более сложного набора кода калькулятора в проект.
В редакторе кода замените весь код в Program.cs следующим новым кодом:
using System; namespace Calculator { class Program { static void Main(string[] args) { // Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) { case "a": Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2)); break; } // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app..."); Console.ReadKey(); } } }
Нажмите кнопку Калькулятор или нажмите клавишу F5, чтобы запустить приложение.
Откроется окно консоли.
В окне консоли следуйте инструкциям, чтобы добавить номера 42 и 119 вместе.
Приложение должно выглядеть следующим образом:
В редакторе кода замените весь код в Program.cs следующим новым кодом:
// Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) { case "a": Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2)); break; } // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app..."); Console.ReadKey();
Нажмите кнопку Калькулятор или нажмите клавишу F5, чтобы запустить приложение.
Откроется окно консоли.
В окне консоли следуйте инструкциям, чтобы добавить номера 42 и 119 вместе.
Приложение должно выглядеть следующим образом:
Добавление десятичных функций
Теперь подстройте код, чтобы добавить дополнительные функции.
Текущее приложение калькулятора принимает и возвращает целые числа. Например, если вы запускаете приложение и делите число 42 на число 119, результат равен нулю, который не является точным.
Чтобы исправить код для повышения точности, обрабатывая десятичные разряды:
Из Program.cs в редакторе Visual Studio нажмите клавиши CTRL +H, чтобы открыть элемент управления поиска и замены.
Введите int в контроле и введите float в поле замены .
Выберите значки для регистра сопоставления и совпадения всего слова в элементе управления, или нажмите клавиши ALT+C и ALT+W.
Выберите значок Заменить все или нажмите клавиши Alt+A для выполнения поиска и замены.
Снова запустите приложение калькулятора и разделите число 42 на число 119.
Теперь приложение возвращает десятичное число вместо нуля.
Теперь приложение может создавать десятичные результаты. Сделайте несколько дополнительных настроек к коду, чтобы приложение также может вычислить десятичные разряды.
Используйте консоль поиска и замены для изменения каждого экземпляра переменной
float
наdouble
, а также для изменения каждого экземпляра методаConvert.ToInt32
наConvert.ToDouble
.Запустите приложение калькулятора и разделите число 42,5 на число 119,75.
Теперь приложение принимает десятичные значения и возвращает более длинное десятичное число в качестве результата.
В разделе Пересмотра кода вы уменьшаете количество десятичных разрядов в результатах.
Отладка приложения
Вы улучшили базовое приложение калькулятора, но приложение еще не обрабатывает исключения, такие как ошибки ввода пользователей. Например, если пользователи пытаются разделить на ноль или ввести неожиданный символ, приложение может перестать работать, возвращать ошибку или возвращать непредвиденный нечисловой результат.
Давайте рассмотрим несколько распространенных ошибок ввода пользователей, найдите их в отладчике, если они появятся там, и исправим их в коде.
Кончик
Дополнительные сведения об отладчике и его работе см. в статье Первый взгляд на отладчик Visual Studio.
Исправлена ошибка деления на ноль
Если попытаться разделить число на ноль, консольное приложение может зависнуть, а затем покажет, что неправильно в редакторе кода.
Заметка
Иногда приложение не зависает, и отладчик не отображает ошибку деления на ноль. Вместо этого приложение может возвращать непредвиденный нечисленный результат, например символ бесконечности. Следующее исправление кода по-прежнему применяется.
Давайте изменим код для обработки этой ошибки. В Program.csзамените код для case "d":
следующим кодом:
// Ask the user to enter a non-zero divisor until they do so.
while (num2 == 0)
{
Console.WriteLine("Enter a non-zero divisor: ");
num2 = Convert.ToDouble(Console.ReadLine());
}
Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
break;
После замены кода раздел с инструкцией switch
должен быть похож на следующий скриншот.
Теперь, когда вы делите любое число на ноль, приложение запрашивает другое число и продолжает запрашивать, пока не укажите ненулевое число.
Исправьте ошибку формата
Если ввести алфавитный символ, когда приложение ожидает числовой символ, приложение зависает. Visual Studio показывает, что неправильно в редакторе кода.
Чтобы предотвратить это исключение, можно выполнить рефакторинг ранее введённого кода.
Изменение кода
Вместо того, чтобы использовать класс program
для обработки всего кода, можно разделить приложение на два класса: Calculator
и Program
.
Класс Calculator
обрабатывает основную часть работы вычисления, а класс Program
обрабатывает пользовательский интерфейс и работу по обработке ошибок.
Давайте начнем.
В Program.csудалите все и добавьте следующий новый класс
Calculator
:class Calculator { public static double DoOperation(double num1, double num2, string op) { double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) { case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) { result = num1 / num2; } break; // Return text for an incorrect option entry. default: break; } return result; } }
Кроме того, добавьте новый класс
Program
следующим образом:class Program { static void Main(string[] args) { bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) { // Declare variables and set to empty. string numInput1 = ""; string numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput1 = Console.ReadLine(); } // Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput2 = Console.ReadLine(); } // Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string op = Console.ReadLine(); try { result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) { Console.WriteLine("This operation will result in a mathematical error.\n"); } else Console.WriteLine("Your result: {0:0.##}\n", result); } catch (Exception e) { Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); } Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. } return; } }
Нажмите кнопку Калькулятор или нажмите клавишу F5, чтобы запустить приложение.
Следуйте инструкциям и разделите число 42 на число 119. Результаты должны выглядеть следующим образом:
Теперь вы можете выполнять дополнительные вычисления, пока не закроете консольное приложение. В результатах также меньше десятичных разрядов. При вводе неправильного знака вы получите соответствующий ответ об ошибке.
Изменение кода
Вместо того, чтобы использовать класс program
для обработки всего кода, можно разделить приложение на два класса: Calculator
и Program
.
Класс Calculator
обрабатывает основную часть работы вычисления, а класс Program
обрабатывает пользовательский интерфейс и работу по обработке ошибок.
Давайте начнем.
В Program.csудалите все и добавьте следующий новый класс
Calculator
:class Calculator { public static double DoOperation(double num1, double num2, string op) { double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) { case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) { result = num1 / num2; } break; // Return text for an incorrect option entry. default: break; } return result; } }
Кроме того, добавьте новый класс
Program
следующим образом:class Program { static void Main(string[] args) { bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) { // Declare variables and set to empty. // Use Nullable types (with ?) to match type of System.Console.ReadLine string? numInput1 = ""; string? numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput1 = Console.ReadLine(); } // Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput2 = Console.ReadLine(); } // Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string? op = Console.ReadLine(); // Validate input is not null, and matches the pattern if (op == null || ! Regex.IsMatch(op, "[a|s|m|d]")) { Console.WriteLine("Error: Unrecognized input."); } else { try { result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) { Console.WriteLine("This operation will result in a mathematical error.\n"); } else Console.WriteLine("Your result: {0:0.##}\n", result); } catch (Exception e) { Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); } } Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. } return; } }
Заметка
Рекомендуется использовать типы, допускающие значение NULL (с символом
?
) для входных строк, так какSystem.Console.ReadLine
возвращает ссылочный тип, допускающий значение NULL,.Нажмите кнопку Калькулятор или нажмите клавишу F5, чтобы запустить приложение.
Следуйте инструкциям и разделите число 42 на число 119. Результаты должны выглядеть следующим образом:
Теперь вы можете выполнять дополнительные вычисления, пока не закроете консольное приложение. В результатах также меньше десятичных разрядов. При вводе неправильного знака вы получите соответствующий ответ об ошибке.
Закройте приложение
Если вы еще этого не сделали, закройте приложение Калькулятора.
Закройте область выходных данных в Visual Studio.
В Visual Studio нажмите клавиши CTRL +S, чтобы сохранить приложение.
Добавление системы управления версиями Git
Теперь, когда у вас есть приложение, может потребоваться добавить его в репозиторий Git. Visual Studio упрощает этот процесс с помощью средств Git, которые можно использовать непосредственно из интегрированной среды разработки.
Кончик
Git является наиболее широко используемой современной системой управления версиями. Будь то профессиональный разработчик или вы узнаете, как кодировать, Git может быть очень полезным. Если вы не знакомы с Git, веб-сайт https://git-scm.com/
является хорошим местом для начала. Вы можете найти памятки, популярную онлайн-книгу и видео Git Basics.
Чтобы связать код с Git, начните с создания нового репозитория Git, где находится ваш код:
В строке состояния в правом нижнем углу Visual Studio выберите Добавить в систему управления версиями, а затем выберите Git.
В диалоговом окне Создание репозитория Git войдите в GitHub:
Имя репозитория автоматически заполняется в зависимости от расположения папки. Новый репозиторий по умолчанию является частным, что означает, что вы единственный, кто может получить к нему доступ.
Кончик
Независимо от того, является ли ваш репозиторий общедоступным или частным, лучше иметь удаленную резервную копию кода, хранящегося безопасно на GitHub. Даже если вы не работаете с командой, удаленный репозиторий делает код доступным для вас с любого компьютера.
Выберите Создать и отправить. После создания репозитория в строке состояния отображаются сведения о состоянии:
Использование действий Git в Visual Studio
Ниже приведены краткие сведения о действиях Git, доступных в строке состояния Visual Studio:
Стрелки вверх и вниз показывают количество исходящих и входящих коммитов в вашей текущей ветке. Этот значок можно использовать для извлечения любых входящих коммитов или отправки исходящих коммитов.
Чтобы просмотреть определенный коммит, щелкните стрелку вниз или вверх, а затем выберите Просмотр исходящих/входящих.
В Pencil отображается количество незафиксированных изменений в вашем коде. Этот значок можно выбрать, чтобы просмотреть эти изменения в окне изменений Git .
Меню Git предоставляет инструменты для выполнения действий с репозиторием над вашими файлами. Вы можете использовать команды git fetch, pull, push и sync для управления версиями в Visual Studio.
Дополнительные сведения о том, как использовать Git с вашим приложением, см. в разделе О Git в Visual Studio.
Проверка: код завершен
В этом руководстве вы внесли много изменений в приложение Калькулятора. Теперь приложение обрабатывает вычислительные ресурсы более эффективно и обрабатывает большинство ошибок ввода пользователей.
Вот полный код, все в одном месте:
class Calculator
{
public static double DoOperation(double num1, double num2, string op)
{
double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error.
// Use a switch statement to do the math.
switch (op)
{
case "a":
result = num1 + num2;
break;
case "s":
result = num1 - num2;
break;
case "m":
result = num1 * num2;
break;
case "d":
// Ask the user to enter a non-zero divisor.
if (num2 != 0)
{
result = num1 / num2;
}
break;
// Return text for an incorrect option entry.
default:
break;
}
return result;
}
}
class Program
{
static void Main(string[] args)
{
bool endApp = false;
// Display title as the C# console calculator app.
Console.WriteLine("Console Calculator in C#\r");
Console.WriteLine("------------------------\n");
while (!endApp)
{
// Declare variables and set to empty.
string numInput1 = "";
string numInput2 = "";
double result = 0;
// Ask the user to type the first number.
Console.Write("Type a number, and then press Enter: ");
numInput1 = Console.ReadLine();
double cleanNum1 = 0;
while (!double.TryParse(numInput1, out cleanNum1))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput1 = Console.ReadLine();
}
// Ask the user to type the second number.
Console.Write("Type another number, and then press Enter: ");
numInput2 = Console.ReadLine();
double cleanNum2 = 0;
while (!double.TryParse(numInput2, out cleanNum2))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput2 = Console.ReadLine();
}
// Ask the user to choose an operator.
Console.WriteLine("Choose an operator from the following list:");
Console.WriteLine("\ta - Add");
Console.WriteLine("\ts - Subtract");
Console.WriteLine("\tm - Multiply");
Console.WriteLine("\td - Divide");
Console.Write("Your option? ");
string op = Console.ReadLine();
try
{
result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
if (double.IsNaN(result))
{
Console.WriteLine("This operation will result in a mathematical error.\n");
}
else Console.WriteLine("Your result: {0:0.##}\n", result);
}
catch (Exception e)
{
Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
}
Console.WriteLine("------------------------\n");
// Wait for the user to respond before closing.
Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
if (Console.ReadLine() == "n") endApp = true;
Console.WriteLine("\n"); // Friendly linespacing.
}
return;
}
}
class Calculator
{
public static double DoOperation(double num1, double num2, string op)
{
double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error.
// Use a switch statement to do the math.
switch (op)
{
case "a":
result = num1 + num2;
break;
case "s":
result = num1 - num2;
break;
case "m":
result = num1 * num2;
break;
case "d":
// Ask the user to enter a non-zero divisor.
if (num2 != 0)
{
result = num1 / num2;
}
break;
// Return text for an incorrect option entry.
default:
break;
}
return result;
}
}
class Program
{
static void Main(string[] args)
{
bool endApp = false;
// Display title as the C# console calculator app.
Console.WriteLine("Console Calculator in C#\r");
Console.WriteLine("------------------------\n");
while (!endApp)
{
// Declare variables and set to empty.
// Use Nullable types (with ?) to match type of System.Console.ReadLine
string? numInput1 = "";
string? numInput2 = "";
double result = 0;
// Ask the user to type the first number.
Console.Write("Type a number, and then press Enter: ");
numInput1 = Console.ReadLine();
double cleanNum1 = 0;
while (!double.TryParse(numInput1, out cleanNum1))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput1 = Console.ReadLine();
}
// Ask the user to type the second number.
Console.Write("Type another number, and then press Enter: ");
numInput2 = Console.ReadLine();
double cleanNum2 = 0;
while (!double.TryParse(numInput2, out cleanNum2))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput2 = Console.ReadLine();
}
// Ask the user to choose an operator.
Console.WriteLine("Choose an operator from the following list:");
Console.WriteLine("\ta - Add");
Console.WriteLine("\ts - Subtract");
Console.WriteLine("\tm - Multiply");
Console.WriteLine("\td - Divide");
Console.Write("Your option? ");
string? op = Console.ReadLine();
// Validate input is not null, and matches the pattern
if (op == null || ! Regex.IsMatch(op, "[a|s|m|d]"))
{
Console.WriteLine("Error: Unrecognized input.");
}
else
{
try
{
result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
if (double.IsNaN(result))
{
Console.WriteLine("This operation will result in a mathematical error.\n");
}
else Console.WriteLine("Your result: {0:0.##}\n", result);
}
catch (Exception e)
{
Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
}
}
Console.WriteLine("------------------------\n");
// Wait for the user to respond before closing.
Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
if (Console.ReadLine() == "n") endApp = true;
Console.WriteLine("\n"); // Friendly linespacing.
}
return;
}
}
Следующий шаг
Продолжайте работу со второй частью этого руководства: