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
相关产品推荐
相关产品推荐

