ГПТха говорит следующее:
Код вашего калькулятора выглядит хорошо организованным и функциональным. Вот несколько замечаний и предложений по улучшению:
Преимущества:
- Модульная структура: Использование отдельных методов для получения числа, выбора операции и выполнения операции делает код читаемым и легким для сопровождения.
- Проверка ввода: Вы предусмотрели валидацию для ввода чисел и операций, что предотвращает ошибки выполнения.
- Обработка деления на ноль: Деление на ноль возвращает NaN, и вы обрабатываете этот случай при выводе результата.
Возможные улучшения:
- Лишняя проверка в PerformOperation: Если пользователь уже выбрал корректную операцию, проверка на недопустимую операцию (default) в switch-case практически не нужна.
- Улучшение читаемости: Используйте комментарии только там, где это необходимо, чтобы не загромождать код.
- Кодировка Console.ReadLine(): Если пользователь случайно введет пустую строку или пробелы в методе GetOperation, это может вызвать ошибку. Вставьте Trim() для обработки лишних пробелов.
- Локализация сообщений: Добавьте возможность легкой локализации строк, если планируется работа с разными языками.
using System;
class Calculator
{
static void Main(string[] args)
{
Console.WriteLine("Простой калькулятор");
// Получение первого числа
double num1 = GetNumber("Введите первое число:");
// Получение второго числа
double num2 = GetNumber("Введите второе число:");
// Выбор операции
char operation = GetOperation("Выберите операцию (+, -, *, /):");
// Выполнение операции
double result = PerformOperation(num1, num2, operation);
// Вывод результата
if (double.IsNaN(result))
{
Console.WriteLine("Ошибка: Неверная операция или деление на ноль!");
}
else
{
Console.WriteLine($"{num1} {operation} {num2} = {result}");
}
Console.WriteLine("Нажмите любую клавишу для выхода...");
Console.ReadKey();
}
static double GetNumber(string prompt)
{
double number;
Console.WriteLine(prompt);
while (!double.TryParse(Console.ReadLine(), out number))
{
Console.WriteLine("Некорректный ввод. Пожалуйста, введите число:");
}
return number;
}
static char GetOperation(string prompt)
{
char operation;
Console.WriteLine(prompt);
while (!char.TryParse(Console.ReadLine(), out operation) || "+-*/".IndexOf(operation) == -1)
{
Console.WriteLine("Некорректный ввод. Пожалуйста, выберите операцию (+, -, *, /):");
}
return operation;
}
static double PerformOperation(double num1, double num2, char operation)
{
switch (operation)
{
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num2 != 0 ? num1 / num2 : double.NaN; // Возвращаем NaN для деления на ноль
default:
return double.NaN; // Неверная операция (хотя этот случай не должен возникнуть)
}
}
}