添加双打而不是求和

时间:2019-02-25 00:18:48

标签: c#

我正在使用一个计算器,只要我的计算器加一个数字,它就会将它们连接在一起。

一个例子是3 + 5,它给了我35。我将数字转换为双精度数,仍然给了我35。这是我的代码:

Console.Write("Enter a Number: ");
double num1 = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter a Operator: ");
string op = Console.ReadLine();

Console.Write("Enter a Number: ");
double num2 = Convert.ToDouble(Console.ReadLine());

if (op == "+")
{
    Console.WriteLine(num1 + " plus " + num2 + " is " + num1 + num2);
}

Console.ReadLine();

感谢您浏览我的帖子,祝您生活愉快。

2 个答案:

答案 0 :(得分:3)

由于使用+的表达式中包含字符串,并且由于这些字符串参数在该表达式中出现的顺序,因此C#编译器将+运算符视为字符串连接。

更详细地:+被解释为字符串连接,因为表达式是从左到右求值的。第一个评估的项是num1 + " plus "。由于涉及到字符串,因此第一个+被视为字符串连接的运算符。在将第一项评估为字符串的情况下,第二(及其后)+(分别带有各自的第二个自变量)也被视为字符串连接,因为每个(部分)项的左侧总是被评估为字符串。

一种修复代码的“便宜”方法是使用括号来帮助编译器区分算术运算符和字符串连接运算符:

Console.WriteLine(num1 + " plus " + num2 + " is " + ( num1 + num2 ) );

可以通过使用字符串插值(请注意字符串前面的$符号)来实现一种更安全,更易读的输出输出方式,可以轻松消除+运算符的混乱:

Console.WriteLine($"{num1} plus {num2} is {num1 + num2}");

(感谢@AlexeiLevenkov指出后者)

答案 1 :(得分:0)

尽管您可能希望使用String Interpolationdouble.TryParse来验证输入并提供有关失败的反馈,但其他答案也足以说明问题。

String Interpolation

  

$特殊字符将字符串文字标识为插值   串。插值字符串是可能包含以下内容的字符串文字   插值表达式。当插值字符串解析为   结果字符串,带有插值表达式的项目将替换为   表达式结果的字符串表示形式。此功能是   在该语言的C#6和更高版本中可用。

Double.TryParse Method

  

将数字的字符串表示形式转换为其双精度   等效的浮点数。返回值指示是否   转换成功还是失败。

示例

// valid operators
var ops = new[] { "+", "-", "/", "*" };

double num1;
Console.Write("Enter a Number: ");
while (!double.TryParse(Console.ReadLine(), out num1))
   Console.Write("Invalid number, try again");

string op;
Console.Write($"Enter operator (\"+\", \"-\", \"/\", \"*\"): ");
while (!ops.Contains(op = Console.ReadLine()))
   Console.Write("Invalid operator, try again");

double num2;
Console.Write("Enter a Number: ");
while (!double.TryParse(Console.ReadLine(), out num2))
   Console.Write("Invalid number, try again");

// local function to do stuff
double ApplyOperator()
{
   switch (op)
   {
      case "+": return num1 + num2;
      case "-": return num1 - num2;
      case "/": return num1 / num2;
      case "*": return num1 * num2;
      default: throw new InvalidOperationException();
   }
}

// an interpolated string
Console.WriteLine($"{num1} {op} {num2} = {ApplyOperator()}");

Console.ReadLine();

输出

Enter a Number: 1
Enter operator ("+", "-", "/", "*"): +
Enter a Number: 2
1 + 2 = 3