Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Text;
- //123 + 456 = 579
- namespace ConsoleCalculator
- {
- class Program
- {
- static void Main()
- {
- Console.WriteLine("=== Simple Calculator ===");
- Console.WriteLine("Type an expression and press '=' to execute.");
- Console.WriteLine("Press Enter (empty line) to exit.\n");
- var expression = new StringBuilder();
- while (true)
- {
- var keyInfo = Console.ReadKey(intercept: true);
- char keyChar = keyInfo.KeyChar;
- if (keyInfo.Key == ConsoleKey.Enter)
- {
- if (expression.Length == 0)
- {
- Console.WriteLine("\nGoodbye!");
- break;
- }
- else
- {
- Console.WriteLine();
- continue;
- }
- }
- if (keyInfo.Key == ConsoleKey.Backspace)
- {
- if (expression.Length > 0)
- expression.Remove(expression.Length - 1, 1);
- }
- else if (keyChar == '=')
- {
- // Execute the current expression
- Console.WriteLine();
- Console.WriteLine(CalculateSimpleExpression(expression.ToString()));
- break;
- }
- else
- {
- // Append valid characters only
- if (char.IsDigit(keyChar) || "+-*/x().".Contains(keyChar))
- expression.Append(keyChar);
- }
- Console.Clear();
- Console.Write(expression.ToString());
- }
- }
- static double CalculateSimpleExpression(string expression)
- {
- if (string.IsNullOrWhiteSpace(expression))
- return 0;
- var numbers = new List<double>();
- var operators = new List<char>();
- var current = new StringBuilder();
- foreach (char c in expression)
- {
- if (char.IsDigit(c) || c == '.')
- {
- current.Append(c);
- }
- else if ("+-*/".Contains(c))
- {
- if (current.Length > 0)
- {
- numbers.Add(double.Parse(current.ToString()));
- current.Clear();
- }
- operators.Add(c);
- }
- }
- if (current.Length > 0)
- numbers.Add(double.Parse(current.ToString()));
- if (numbers.Count == 0)
- return 0;
- // Perform operations left to right
- double result = numbers[0];
- for (int i = 0; i < operators.Count; i++)
- {
- double next = numbers[i + 1];
- char op = operators[i];
- result = op switch
- {
- '+' => result + next,
- '-' => result - next,
- '*' => result * next,
- '/' => next != 0 ? result / next : double.NaN,
- _ => result
- };
- }
- return result;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment