You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于修复C#简易计算器多运算数计算逻辑错误的技术咨询

修复C#简易计算器的多运算数逻辑错误

我来帮你拆解下问题根源,再给出具体的修复方案~

首先看你的代码逻辑:你把answ初始化为0,然后每次循环都把当前运算符左右的两个数运算后直接加到answ里。拿15 + 15 + 15这个例子来说:

  • 第一次循环(i=1,运算符是+):answ = 0 + 15 + 15 = 30
  • 第二次循环(i=3,运算符是+):answ = 30 + 15 + 15 = 60

这完全不符合我们想要的“逐步累积运算结果”的逻辑,正确的思路应该是用前一次运算的结果和下一个数进行运算,而不是每次都取相邻的两个数叠加到初始值上。

具体修复步骤

  1. 正确初始化结果变量:把answ的初始值设为第一个运算数,而不是默认的0。
  2. 调整循环内的运算逻辑:每次循环用当前的answ和下一个运算数(也就是separate[i+1])执行对应操作,更新answ的值。

修复后的完整代码

string equal = Console.ReadLine();
string[] separate = equal.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

// 先做输入格式合法性检查:运算数数量必须比运算符多1,所以数组长度应为奇数
if (separate.Length % 2 == 0)
{
    Console.WriteLine("输入格式错误,请按照「数字 运算符 数字 ...」的格式输入");
    return;
}

// 初始化answ为第一个运算数
int answ = Convert.ToInt32(separate[0]);

// 从第一个运算符开始循环,每次步长2(跳过运算数,只处理运算符)
for (int i = 1; i < separate.Length; i = i + 2)
{
    if (!int.TryParse(separate[i + 1], out int nextNum))
    {
        Console.WriteLine("输入包含非数字内容,运算失败");
        return;
    }

    switch (separate[i])
    {
        case "+":
            answ += nextNum;
            break;
        case "-":
            answ -= nextNum;
            break;
        case "*":
            answ *= nextNum;
            break;
        case "/":
            if (nextNum == 0)
            {
                Console.WriteLine("除数不能为0,运算失败");
                return;
            }
            answ /= nextNum;
            break;
        default:
            Console.WriteLine("未知运算符,请输入 +、-、*、/");
            return;
    }
}
Console.WriteLine(answ);

额外优化说明

我还加了几个实用的健壮性优化:

  • 输入格式检查:判断数组长度是否为奇数,避免格式错误的输入(比如结尾是运算符)
  • 用int.TryParse替代Convert.ToInt32:能处理非数字的输入,避免程序崩溃
  • 除数为0的判断:防止除法运算时出现运行时错误
  • 用switch替代多else if:代码结构更清晰

现在你测试15 + 15 + 15会输出正确的45,输入10 * 2 - 3也能得到17啦~

内容的提问来源于stack exchange,提问作者Lono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:07:44