c#中的控制台计算器,带有一系列计算

时间:2015-09-21 17:54:06

标签: c# loops console calculator chain

我的代码需要一些帮助。 这是任务的样子:

开发一个控制台程序“Calculator”,它在循环迭代中读取算术运算符, 哪个用户输入(“+”,“ - ”,“*”,“/”)及其操作数(实数),然后计算, 带到屏幕的操作结果,然后在下一个操作中用作 第一个操作数(因此,程序将类似于连续计算链)。 程序必须正确处理错误(除以零,输入数字而不是 算术运算符等)并通知用户,而不会中断工作。

这是我到目前为止所得到的:

Console.WriteLine("Введите число x");
            double x = Convert.ToDouble(Console.ReadLine());
      while (true)
         {   Console.WriteLine("Введите число y");
            double y = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("// Выберите операцию //");
            Console.WriteLine("+ - сложение");
            Console.WriteLine("- - вычитание");
            Console.WriteLine("* - умножение");
            Console.WriteLine("/ - деление");
            string z = Console.ReadLine();
                switch (z)
                {
                    case "+":
                        Console.WriteLine("// Результат //");
                        Console.WriteLine(x + y);
                        break;
                    case "-":
                        Console.WriteLine("// Результат //");
                        Console.WriteLine(x - y);
                        break;
                    case "*":
                        Console.WriteLine("// Результат //");
                        Console.WriteLine(x * y);
                        break;
                    case "/":
                        if (y == 0)
                        {
                            Console.WriteLine("Не дели на 0");
                        }
                        else
                        {
                            Console.WriteLine("// Результат //");
                            Console.WriteLine(x / y);
                        }
                        break;
                }

}

我已经成功地通过零限制添加了除法,但这就是全部。 我不知道,如何制作这个“计算链”。当然,我明白我必须使用循环,但不能想出任何东西。我没有的是 - 两个数字正在运行,就是这样,程序停止了。我尝试添加

do
  {
    //main program body
    Console.WriteLine("Press ENTER to continue");
    keyInfo = Console.ReadKey(true);
  }
while (keyInfo.Key == ConsoleKey.Enter);

但这只会使程序从头开始。我需要第一个操作的结果成为第一个操作数,依此类推。然后用户必须输入一些内容才能结束此程序。

对不起我的英语,抱歉我的c#知识很差,不幸的是,我是初学者。 希望很快能听到,先谢谢。

4 个答案:

答案 0 :(得分:0)

        while(true){
        Console.WriteLine("Введите число x");
        double x = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("Введите число y");
        double y = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("// Выберите операцию //");
        Console.WriteLine("+ - сложение");
        Console.WriteLine("- - вычитание");
        Console.WriteLine("* - умножение");
        Console.WriteLine("/ - деление");
        string z = Console.ReadLine();
            switch (z)
            {
                case "+":
                    Console.WriteLine("// Результат //");
                    Console.WriteLine(x + y);
                    break;
                case "-":
                    Console.WriteLine("// Результат //");
                    Console.WriteLine(x - y);
                    break;
                case "*":
                    Console.WriteLine("// Результат //");
                    Console.WriteLine(x * y);
                    break;
                case "/":
                    if (y == 0)
                    {
                        Console.WriteLine("Не дели на 0");
                    }
                    else
                    {
                        Console.WriteLine("// Результат //");
                        Console.WriteLine(x / y);
                    }
                    break;
            }
            Console.WriteLine("Do you want to exit ?! Y:N?");
            char Terminat= Console.ReadKey().KeyChar;
           if(Terminat=='Y'||Terminat=='y'){
             break;
              }

}

答案 1 :(得分:0)

不是直接打印计算结果,而是将结果存储到x变量中,打印出来然后让用户输入下一个y。这样,x将包含先前计算的结果,允许您链接"它到下一个。你只需要第一次x,并在每次循环重复时询问y。

Console.WriteLine("Введите число x");
double x = Convert.ToDouble(Console.ReadLine());

while (true)
{
    Console.WriteLine("Введите число y");
    double y = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("// Выберите операцию //");
    Console.WriteLine("+ - сложение");
    Console.WriteLine("- - вычитание");
    Console.WriteLine("* - умножение");
    Console.WriteLine("/ - деление");
    string z = Console.ReadLine();

    switch (z)
    {
       case "+":
           Console.WriteLine("// Результат //");
           x = (x + y);  //Store the result in x
           Console.WriteLine(x);
           break;
       case "-":
           Console.WriteLine("// Результат //");
           x = (x - y);  //Store the result in x
           Console.WriteLine(x);
           break;
       case "*":
           Console.WriteLine("// Результат //");
           x = (x * y);  //Store the result in x
           Console.WriteLine(x);
           break;
       case "/":
           if (y == 0)
           {
               Console.WriteLine("Не дели на 0");
           }
           else
           {
               Console.WriteLine("// Результат //");
               x = (x / y);
               Console.WriteLine(x);
           }
           break;
    }
}

答案 2 :(得分:0)

这是我的答案(在C#中实现)给那些寻找基于语法分析的计算器的人。我已经使用C ++"

从Stroustrup"编程原则和练习中进行了调整。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CalculatorApplication
{
    class Calculator
    {
        string input;
        char[] szArr;
        int length ;
        int current = -1;
        char ch;
        public Calculator(String input)
        {
            this.input = input;
            szArr = input.ToCharArray();
           length = szArr.Length;
        }
        char nextToken()
        {
            ++current;
            if(current==length) return 'p';
            return szArr[current];
        }
        public double expression()
        {
            double d = term();
            while(true){
            switch (ch)
            {
                case '+':
                    d+= term();
                    break;
                case  '-':
                    d -= term();
                    break;
                default:
                    break;

            }
            if (ch == 'p') break;
        }
            return d;

        }


        public double term()
        {
            double d = primary();
            switch (ch)
            {
                case '*':
                    d *= primary();
                    break;
                case '/':
                     d /= primary();
                    break;
                default:
                    break;

            }
            return d;
        }
        public double primary()
        {
            string str = "";
            double value = 0.0;
            while (true)
            {

                ch = nextToken();
                if (isDigit(ch))
                {
                    str += ch;
                }
                else
                {
                    break;
                }
            }
            value = double.Parse(str);
            return value;

        }

        bool isDigit(char ch)
        {
            return ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9';
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter expression");
            string input = Console.ReadLine();
            Console.WriteLine(new Calculator(input).expression());          
        }
    }
}

答案 3 :(得分:0)

我制作了一个原始计算器,可以使用方括号()和运算符优先级使用以下运算符评估复杂的数学表达式:+-* /%和^。

https://github.com/henon/PrimitiveCalculator

这是它可以做的(交互式控制台输出):

[data-section-id="5fb9813532611c2ac198eff9"] {
  padding-bottom: 35px !important;
}