Продолжаем изучать С# - даже калькулятор имеет свои нюансы

Продолжаем изучать С# - даже калькулятор имеет свои нюансы

Классическое задание при изучении языка программирования - написать на нем калькулятор. И вот вроде все просто, сделай переменные для вводимых данных и добавь выбор операции. Реализовать все это можно через if - else или switch. Но есть пара нюансов...

Вариант работающий на switch
Вариант работающий на switch
Вариант работающий на if - else
Вариант работающий на if - else

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

Вундервафля try - catch
Вундервафля try - catch

Нам нужен оператор обработки исключений try, на случай если найдется очередной нетакусик в строке ввода данных. Для того чтобы нам каждый раз не пришлось перезапускать программу, она зациклена при помощи while.

В try мы помещаем данные для проверки, а в catch порядок действий при обнаружении исключения. В нашем случае мы выводим сообщение что пользователь ошибся и при помощи continue запускаем цикл по новой, минуя остальные операции.

Если бы оператор continue был человеком...
Если бы оператор continue был человеком...

Но даже если мы ввели корректные числа, математика вновь может нагнуть нас. Напомню, что на ноль делить нельзя, но при этом его можно ввести как одну из переменных. Всего одна молитва Горку и Морку в виде if - else все исправляет...

Продолжаем изучать С# - даже калькулятор имеет свои нюансы

На первый взгляд простая задача из курса по итогу тыкает носом в пробелы знаний у новичка. Даже такая базовая вещь как калькулятор требует отладки и устранения всех возможных ошибок при работе программы. А мне еще учиться и учиться...

Так как я еще только в начале пути программиста, а пощупать разработку игр уже хочется, я решил параллельно с освоением C# познакомиться с движками работающими по принципу no code. Пока что мой гоблинский взор пал на GDevelop и в ближайшее время я выложу первые впечатления.

Низкий гоблинский поклон всем кто дочитал до конца статьи! Если вам интересно наблюдать за развитием новичка (или посмеиваться над банальными ошибками) - подписывайтесь на мой блог!

Продолжаем изучать С# - даже калькулятор имеет свои нюансы
55
18 комментариев

Лучше сделать отдельный класс, наследуемый от Exception, в котором ты будешь обрабатывать все свои исключения, а не только невозможность перевода стринг в дабл. Ну и калькулятор у тебя конечно дико примитивный)) А если я хочу три переменных? А если десять? А если скобки хочу? Попробуй забабахать с помощью регулярных выражений и массивов

1
Ответить

Примитивный, как и большая часть гоблинских технологий)

С массивами беда в том, что у них изначально размер фиксированный по количеству аргументов. Уже обжегся когда в рамках эксперимента делал боевую систему из Crusader Kings в консоли. Если интересно, можешь глянуть пост в профиле)

В теории есть вариант как всю эту веселуху через списки реализовать, попробую вечерком)

Ответить

Для успеха надо еще консольку в радужные цвета разукрасить.

Ответить

Я бы за try в таком виде по рукам бил. Что, если пользователь промахнулся только по 1 числу? Почему бы у него ещё раз его не попросить? Вместо этого сбрасывается оба. Что при миссклике бесит. К тому же try здесь легко можно заменить на TryParce нужного тебе типа

1
Ответить

Попробую переделать под повторный запрос, благодарю за совет)

Ответить