我正在做一个计算器,每当我的计算器加起来一个数字,它就把它们连在一起。
这方面的一个例子是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();
谢谢你看我的帖子祝你今天愉快。
发布于 2019-02-24 16:25:35
因为使用+
在表达式中包含字符串,并且由于这些字符串参数在表达式中的出现顺序,所以C#编译器将+
操作符视为字符串连接。
更详细地说:+
被解释为字符串连接,因为表达式是从左到右计算的。第一个评估术语是num1 + " plus "
。由于涉及一个字符串,所以将第一个+
作为字符串连接的运算符处理。在计算到字符串的第一个术语时,第二个和后面的第二个+
参数也被视为字符串连接,因为每个(部分)项的左侧总是被求值为字符串。
修复代码的一种“廉价”方法是使用parantheses帮助编译器区分算术运算符和字符串连接运算符:
Console.WriteLine(num1 + " plus " + num2 + " is " + ( num1 + num2 ) );
可以通过使用字符串内插(注意字符串前面的$
符号)来实现更安全和更易读的输出写入方式,这可以方便地消除+
操作符的混淆:
Console.WriteLine($"{num1} plus {num2} is {num1 + num2}");
(感谢@AlexeiLevenkov指出后者)
发布于 2019-02-24 16:45:48
其他的答案是足够的,并解释这个问题,尽管您可能希望使用串内插和double.TryParse
来验证输入并对失败提供反馈。
$特殊字符将字符串文字标识为内插字符串。内插字符串是可能包含内插表达式的字符串文字。当内插字符串被解析为结果字符串时,带有内插表达式的项将被表达式结果的字符串表示所替换。此特性可在C# 6和更高版本的语言中使用。
将数字的字符串表示形式转换为等效的双精度浮点数.返回值指示转换是否成功。
示例
// 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
https://stackoverflow.com/questions/54857924
复制