多数字计算C#程序与手机计算器结果不符问题咨询
多数字计算器逻辑错误排查与修正
你的计算器程序核心问题出在减法、乘法、除法的计算逻辑完全错误,导致结果和常规计算器不符,以下是具体问题和修正方案:
问题点拆解
- 减法方法(subtract):当前代码
total += numbers[i] - numbers[i]每次累加0,最终结果恒为0,完全不符合多数字连续减法逻辑(如a - b - c)。 - 乘法方法(multiply):当前代码计算的是所有数字的平方和,而非多数字乘积(如
a * b * c)。 - 除法方法(division):当前代码累加每个数字除以自身的结果(恒为1),最终结果等于输入数字的数量,完全不符合连续除法逻辑(如
a / b / c)。
修正后的完整代码
static void Main(string[] args) { string again; do { Console.Write("Enter size to compute: "); // 增加输入合法性判断,避免非数字输入崩溃 if (!int.TryParse(Console.ReadLine(), out int size) || size <= 0) { Console.WriteLine("Invalid size, please enter a positive integer."); continue; } int[] numbers = new int[size]; float[] numberS = new float[size]; Console.Write("Pick one of the operation \"(+) (-) (*) (/)\": "); string operation = Console.ReadLine(); if (operation == "+") { for (int i = 0; i < size; i++) { Console.Write($"Enter number {i+1}: "); int.TryParse(Console.ReadLine(), out numbers[i]); } Console.WriteLine($"The sum is: {add(numbers)}"); } else if (operation == "-") { for (int i = 0; i < size; i++) { Console.Write($"Enter number {i+1}: "); int.TryParse(Console.ReadLine(), out numbers[i]); } Console.WriteLine($"The subtraction is: {subtract(numbers)}"); } else if (operation == "*") { for (int i = 0; i < size; i++) { Console.Write($"Enter number {i+1}: "); int.TryParse(Console.ReadLine(), out numbers[i]); } Console.WriteLine($"The multiplication is: {multiply(numbers)}"); } else if (operation == "/") { bool isValidInput = true; for (int i = 0; i < size; i++) { Console.Write($"Enter number {i+1}: "); if (!float.TryParse(Console.ReadLine(), out numberS[i]) || (i > 0 && numberS[i] == 0)) { Console.WriteLine("Invalid input or division by zero!"); isValidInput = false; break; } } if (isValidInput) { Console.WriteLine($"The division is: {division(numberS)}"); } } else { Console.WriteLine("Invalid Input"); } Console.Write("Do you want to compute again Y/N: "); again = Console.ReadLine()?.ToUpper() ?? "N"; Console.Clear(); } while (again == "Y"); } static int add(int[] numbers) { int total = 0; foreach (int num in numbers) { total += num; } return total; } static int subtract(int[] numbers) { // 以第一个数为初始值,依次减去后续数字 int total = numbers[0]; for (int i = 1; i < numbers.Length; i++) { total -= numbers[i]; } return total; } static int multiply(int[] numbers) { // 以1为初始值,依次乘以所有数字 int total = 1; foreach (int num in numbers) { total *= num; } return total; } static float division(float[] numbers) { // 以第一个数为初始值,依次除以后续数字 float total = numbers[0]; for (int i = 1; i < numbers.Length; i++) { total /= numbers[i]; } return total; }
额外优化说明
- 增加了输入合法性校验,避免非数字输入导致程序崩溃,同时处理了除法中的除零异常。
- 优化了输入提示文本,明确提示输入第几个数字,提升用户体验。
- 部分循环改用
foreach语法,让代码更简洁易读。
内容的提问来源于stack exchange,提问作者XDponce
相关产品推荐
相关产品推荐

