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

