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

C++编写四则运算基础计算器仅加法生效的问题排查

问题根因

代码存在两处核心错误,第一处直接导致所有运算都触发加法逻辑:

  • 条件判断处混用赋值运算符=和相等比较运算符==,同时重复定义同名变量造成作用域遮蔽:每个if/else if条件中写的int addType = 1这类语句,不是读取之前输入存储的addType做判断,而是在条件作用域内重新声明了同名局部变量,并给新变量赋值1、2、3、4。C++里赋值表达式的返回值就是等号右侧的被赋值内容,非0值会被判定为逻辑真,因此第一个if的条件永远成立,程序永远直接进入加法分支,后续分支完全不会执行。
  • 除法逻辑存在整数截断bug:num1和num2都是int整型,直接写num1 / num2会执行整数除法,小数部分会被直接丢弃,哪怕分支逻辑修复,除法结果也不符合预期。
修正后可运行代码
#include <iostream>
using namespace std;

int main() {
  int num1, num2;
  double res;
  int opType;
  cout << "Type a number: ";
  cin >> num1;
  cout << "Type a second number: ";
  cin >> num2;
  cout << "Do you want to 1. add, 2. subtract, 3. divide or 4. multiply: ";
  cin >> opType;
  if (opType == 1) {
    res = num1 + num2;
  }
  else if (opType == 2) {
    res = num1 - num2;
  }
  else if (opType == 3) {
    res = static_cast<double>(num1) / num2; // 强制转double避免整数截断
  }
  else if (opType == 4) {
    res = num1 * num2;
  }
  else {
    cout << "Invalid operation selection!" << endl;
    return 1;
  }
  
  cout << "Your total is: " << res << endl;
  return 0;
}

编码提醒:C++ 中判断两个值相等必须使用双等号==,单等号=仅做赋值使用,二者语义完全不同。非必要不要在内层作用域声明和外层同名的变量,否则会直接遮蔽外层变量,导致逻辑不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:09:17