我正在使用一个计算器,只要我的计算器加一个数字,它就会将它们连接在一起。
一个例子是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();
感谢您浏览我的帖子,祝您生活愉快。
答案 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 Interpolation和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