如何用C++的switch case和while循环实现仅重输运算符的计算器?
问题描述
现有一款用switch case实现的计算器,仅能运行一次。需求如下:
- 通过while循环实现:输入错误运算符时,无需重新输入数值x、y,仅需重新输入正确运算符
- 输入
q时退出程序 - 必须严格使用老师提供的代码片段(不得修改x、y、z等变量)
老师提供的代码片段(修正笔误后):
float x,y,z; // 原代码笔误写为float z,y,z; char err = 'c', opp; while (err != 'q') { cout<<"enter value for x "; cin>>x; cout<<"enter value for y "; cin>>y; cout<<"enter + for addition\n"; cout<<"enter - for subtraction\n"; cout<<"enter * for multiplication\n"; cout<<"enter / for division\n"; cout<<"enter r to restart\n"; cout<<"enter q to quit\n"; cin>>opp; err = 'u'; switch(opp)
部分switch分支(修正语法错误后):
case 'r': cout<<"restaring "<<endl; break; case 'q': cout<<"quitting "<<endl; err ='q'; break;
实现方案
核心思路是将**数值输入(x、y)**放在外层循环,运算符输入及计算放在内层循环,确保错误运算符输入时不重置x、y,同时严格保留老师指定的变量和结构:
#include <iostream> using namespace std; int main() { float x,y,z; // 严格保留原变量 char err = 'c', opp; while (err != 'q') { // 外层循环:仅首次运行或输入r时重新输入x、y cout<<"enter value for x "; cin>>x; cout<<"enter value for y "; cin>>y; // 内层循环:处理运算符输入,错误时重复输入,不重置x、y while (true) { cout<<"enter + for addition\n"; cout<<"enter - for subtraction\n"; cout<<"enter * for multiplication\n"; cout<<"enter / for division\n"; cout<<"enter r to restart\n"; cout<<"enter q to quit\n"; cin>>opp; err = 'u'; // 保留老师指定的初始值 switch(opp) { case '+': z = x + y; cout<<"Result: "<<z<<endl; break; // 计算完成后退出内层循环 case '-': z = x - y; cout<<"Result: "<<z<<endl; break; case '*': z = x * y; cout<<"Result: "<<z<<endl; break; case '/': if(y != 0) { z = x / y; cout<<"Result: "<<z<<endl; } else { cout<<"Error: Division by zero!"<<endl; continue; // 除数为0时,重新输入运算符 } break; case 'r': cout<<"restaring "<<endl; goto restart_loop; // 跳转到外层循环开头,重新输入x、y case 'q': cout<<"quitting "<<endl; err = 'q'; goto exit_program; // 直接退出所有循环 default: cout<<"Invalid operator! Please re-enter."<<endl; continue; // 错误运算符,重新输入 } // 合法运算符计算完成后,退出内层循环 break; } restart_loop: ; } exit_program: return 0; }
关键逻辑说明
- 循环嵌套:外层控制x、y的输入时机,内层专门处理运算符输入,错误时重复请求输入,不重置x、y
- 变量保留:严格使用老师指定的
err、opp、x、y、z,未修改或新增禁止变量 - 分支处理:
- 合法运算符:计算完成后退出内层循环,等待用户选择重启或退出
- 错误运算符:提示后继续内层循环,重新输入
r:跳转至外层循环开头,重新输入x、yq:设置err='q'并退出所有循环
- 异常处理:单独判断除数为0的情况,避免程序崩溃并要求重新输入运算符
内容的提问来源于stack exchange,提问作者user20129748
相关产品推荐
相关产品推荐

