我的代码需要一些帮助。 这是任务的样子:
开发一个控制台程序“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#知识很差,不幸的是,我是初学者。 希望很快能听到,先谢谢。
答案 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;
}