C#实现加法运算时出现字符串拼接(1+1输出11)问题求助
问题根因
你把参与运算的两个数字、最终结果全部定义成了string字符串类型。C# 中两个字符串使用+运算符时,执行的是文本拼接逻辑,不是数值加法:输入1和1时,两个字符串"1"和"1"拼接自然得到"11",不会算出数值结果2。
你当前代码还有几个会影响运行的逻辑漏洞:
- 存储用户输入命令的
enteredCommand变量没有赋值入口,程序启动后直接判断,永远进不了doMath的功能分支 - 没有做输入合法性校验,用户输入非数字内容时程序会直接抛出异常崩溃
- 你之前测试的
+=运算符如果作用在字符串类型上,效果同样是拼接,只有作用在数值类型上时才会实现累加效果
修复步骤
- 参与数值运算的变量不要用
string类型,改用int(整数)或double(浮点数,支持小数)类型 - 读取用户输入的数字内容后,先把字符串格式的输入转成数值类型,再执行加法运算
- 补上用户输入命令的读取逻辑,让
doMath命令可以被正常触发 - 增加基础的输入校验,非法输入时给出提示而不是直接崩溃
修复后的完整代码
namespace Game { public static class Program { // 命令定义 public static string enteredCommand; public static string commanddomath = "doMath"; static void Main() { // 读取用户输入的命令 Console.WriteLine("Please enter command:"); enteredCommand = Console.ReadLine()?.Trim(); if (enteredCommand == commanddomath) { Console.WriteLine("Ok"); Console.WriteLine("What Operation should I do?"); string mathOperation = Console.ReadLine()?.Trim(); if (mathOperation == "+") { Console.WriteLine("Addition! Easy! What is the first number? ex. 6"); string firstInput = Console.ReadLine()?.Trim(); Console.WriteLine("Ok, what do you want the second number to be? ex. 8"); string secondInput = Console.ReadLine()?.Trim(); // 校验输入是否为合法数字,转换为数值类型后计算 if (double.TryParse(firstInput, out double firstNum) && double.TryParse(secondInput, out double secondNum)) { double finalAnswer = firstNum + secondNum; Console.WriteLine($"Ok! The answer is... {finalAnswer}"); } else { Console.WriteLine("Input invalid, please enter valid numbers."); } } // 减法、乘法、除法等其他运算可以在这里新增分支扩展 } else { Console.WriteLine("That is not a command"); } Console.ReadKey(); } } }
补充提示
- 原代码里的变量名
FinalAwnser存在拼写错误,正确拼写为FinalAnswer,后续开发注意变量名拼写一致性,避免因为拼写错误引发不必要的bug - 所有需要做数学运算的值,必须先转为数值类型再操作,不要直接对字符串做算术运算
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

