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

C++使用switch实现输入'='终止的四则运算累加器开发问题求助

问题分析与修复方案

现有代码存在的问题

  • 变量未初始化:change、total两个变量声明后没有赋初始值,while循环第一次判断时change的值是随机的,会导致程序运行逻辑不可预测;另外total作为累加值需要初始化为第一个输入的操作数,而不是每次都用两个新输入的数计算后覆盖。
  • 循环逻辑错误:现有循环每次都会读取3个值(num1、运算符、num2),不符合连续累加的运算逻辑,比如示例输入第一次读取6、+、5计算得到11后,下一次循环又会读取新的num1也就是3,直接覆盖之前的运算上下文,无法实现连续运算。
  • 运算符判断时机错误:当用户输入=的时候不需要再读取第二个操作数,现有代码在读取到=运算符后仍然会先执行cin >> num2逻辑,导致需要多输入一个值才会触发结束流程。
  • 累加逻辑缺失:现有代码每次计算都直接把新的两数运算结果赋值给total,没有基于之前的累加结果计算,连续运算时只会保留最后一次两个数的运算结果。

修复方案

可以保留while循环结构,仅调整内部执行逻辑即可实现需求,修复后代码如下:

#include <iostream>
using namespace std;

int main()
{
    float total;
    char op;
    float num;

    cout << "Welcome to your friendly neighborhood accumulator! Please input your expression, starting with an operand and type in  '='  when completed." << endl;
    
    // 读取初始第一个操作数作为累加基数
    cin >> total;
    // 读取第一个运算符
    cin >> op;
    while(op != '='){       
        // 读取当前参与运算的操作数
        cin >> num;
        // 基于累计值执行运算
        switch(op){
            case '+':
                total += num;
                break;
            case '-':
                total -= num;
                break;
            default:
                cout << "Incorrect operator" << endl;
                return 1;
        }
        // 读取下一个运算符
        cin >> op;
    }
    // 输出最终计算结果
    cout << total << endl;

    cout << "Thank you for using the accumulator!" << endl;
   
   return 0;
}

针对示例输入6 + 5 - 3 -7 =,上述代码运算流程为:6+5=11 → 11-3=8 → 8-7=1,和预期输出一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:00:01