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

如何用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;
}

关键逻辑说明

  1. 循环嵌套:外层控制x、y的输入时机,内层专门处理运算符输入,错误时重复请求输入,不重置x、y
  2. 变量保留:严格使用老师指定的err、opp、x、y、z,未修改或新增禁止变量
  3. 分支处理:
    • 合法运算符:计算完成后退出内层循环,等待用户选择重启或退出
    • 错误运算符:提示后继续内层循环,重新输入
    • r:跳转至外层循环开头,重新输入x、y
    • q:设置err='q'并退出所有循环
  4. 异常处理:单独判断除数为0的情况,避免程序崩溃并要求重新输入运算符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:30:54