summaryrefslogtreecommitdiff
path: root/src/calculator.d
diff options
context:
space:
mode:
authorseth <[email protected]>2023-07-03 23:54:18 -0400
committerseth <[email protected]>2023-07-04 00:05:04 -0400
commit369eb89ea18250bad1b3ef73280b7683ee1c6f93 (patch)
tree8cc728a4db0e6431b5320295e0ddbdd9a6ab1d2b /src/calculator.d
initial commitHEADmain
Diffstat (limited to 'src/calculator.d')
-rw-r--r--src/calculator.d49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/calculator.d b/src/calculator.d
new file mode 100644
index 0000000..c7933be
--- /dev/null
+++ b/src/calculator.d
@@ -0,0 +1,49 @@
+import std.stdio;
+import std.string;
+
+class InvalidOperatorException : Exception {
+ this(string msg, string file = __FILE__, size_t line = __LINE__) {
+ super(msg, file, line);
+ }
+}
+
+float calculate(char[] operator, float number1, float number2) {
+ foreach (c; operator) {
+ switch(c) {
+ case '+':
+ return number1 + number2;
+ case '-':
+ return number1 - number2;
+ case '/':
+ return number1 / number2;
+ case '*':
+ return number1 * number2;
+ default:
+ continue;
+ }
+ }
+ throw new InvalidOperatorException("invalid operator used!");
+}
+
+void main() {
+ char[] operator;
+ float number1;
+ float number2;
+ write("enter a number: ");
+ readf("%f", &number1);
+
+ write("enter an operator: ");
+ readf(" %s\n", &operator);
+
+ write("enter another number: ");
+ readf(" %f", &number2);
+
+ float result;
+ try {
+ result = calculate(operator, number1, number2);
+ } catch (InvalidOperatorException e) {
+ writeln(e);
+ }
+
+ writeln(result);
+}