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

C++公式计算程序switch分支4/5/6/7选项无法运行问题求助

问题原因
  • switch分支未隔离作用域:C++中switch所有case默认共享同一作用域,你在多个case中直接定义局部变量,会触发重复定义规则,编译器会禁止后续分支正常编译运行,这是4-7选项无法使用的核心原因。
  • 百分比计算分支菜单调用错误:case'6'的输入环节错误调用了质能计算的mass_menu(),而非对应百分比菜单,会导致页面显示异常。
  • 计算函数存在冗余参数:所有自定义计算函数都传入了用来存储结果的多余参数,既无实际作用也增加了调用成本,属于不规范写法。
修复方案
  1. 给每个switch的case分支增加花括号包裹代码,隔离不同分支的局部变量作用域。
  2. 将case'6'中输入前的mass_menu()修改为percentage_menu()。
  3. (可选)简化所有自定义计算函数,移除冗余的结果存储参数,直接返回计算值。

修复后完整代码

#include<iostream>
#include<conio.h>
#include<cmath>
#include<iomanip>
#include<windows.h>
#define PI 3.14159
using namespace std;

HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);

//设置控制台文字颜色
void colorText(int i){
    SetConsoleTextAttribute(h,i);
}
//公式函数(已移除冗余参数)
float density(float mass, float volume){
    return mass / volume;
}
int exponent(int base,int index){
    return pow(base, index);
}
float hypotenuse(float A_side, float B_side){
    return sqrt((A_side*A_side)+(B_side*B_side)); 
}
float velocity(float initial, float acceleration, float time){
    return initial + (acceleration * time);
}
float mass_en(float mass_value, float speedlight_value){
    return mass_value * (speedlight_value * speedlight_value);
}
float percentage(float number, float base_per){
    return (number/base_per)*100;
}   
// 主菜单
void main_Menu(){
    colorText(11);
    system("CLS");
    cout << "----------------------\n";
    cout << "*  6款常用公式计算  *\n";
    cout << "----------------------\n";
    cout << setw(3)<<"1.密度计算 \n";
    cout << setw(3)<<"2.指数计算\n";
    cout << setw(3)<<"3.直角三角形斜边计算\n";
    cout << setw(3)<<"4.速度计算\n";
    cout << setw(3)<<"5.质能计算\n";
    cout << setw(3)<<"6.百分比计算\n";
    cout << setw(3)<<"7.成员信息\n";
    cout << "----------------------\n";
}

// 子菜单
void density_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      密度计算      *\n";
    cout << "---------------------\n";
}
void exponent_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      指数计算      *\n";
    cout << "---------------------\n";
}
void hypotenuse_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      斜边计算      *\n";
    cout << "---------------------\n";
}
void velocity_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      速度计算      *\n";
    cout << "---------------------\n";
}
void mass_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      质能计算      *\n";
    cout << "---------------------\n";
}
void percentage_menu(){
    system("CLS");
    cout << "---------------------\n";
    cout << "*      百分比计算    *\n";
    cout << "---------------------\n";
}


int main(){
    char choosechoice;
    do{
        main_Menu();
        cout << "按X或x退出程序: ";
        cin >> choosechoice;

        switch(choosechoice){
            case '1':{
                system("CLS");
                float mass, volume;
                cout << fixed;
                cout << setprecision(2);
                density_menu();
                cout << "输入质量(kg): ";
                cin >> mass;
                cout << "输入体积(m³): ";
                cin >> volume;
                system("CLS");
                density_menu();
                cout << setw(10)<<"质量: " << setw(6)<<mass << " kg"<< endl;
                cout << setw(10)<<"体积: " << setw(6)<<volume << " m³"<< endl;
                cout << setw(10)<<"密度: " << setw(6)<<density(mass,volume)<<" kg/m³";
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '2':{
                system("CLS");
                int base, index;
                cout << fixed;
                cout << setprecision(2);
                exponent_menu();
                cout << "输入底数: ";
                cin >> base;
                cout << "输入指数: ";
                cin >> index;
                system("CLS");
                exponent_menu();
                cout << setw(15)<<"底数: " << setw(6)<<base << endl;
                cout << setw(15)<<"指数: " << setw(6)<<index << endl;
                cout << setw(15)<<"结果: " << setw(6)<<exponent(base,index);
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '3':{
                system("CLS");
                float A_side,B_side;
                cout << fixed;
                cout << setprecision(2);
                hypotenuse_menu();
                cout << "输入直角边A长度: ";
                cin >> A_side;
                cout << "输入直角边B长度: ";
                cin >> B_side;
                system("CLS");
                hypotenuse_menu();
                cout << setw(10)<<"斜边长度: " << setw(6)<<hypotenuse(A_side,B_side);
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '4':{
                system("CLS");
                float initial, acceleration, time;
                cout << fixed;
                cout << setprecision(2);
                velocity_menu();
                cout << "输入初速度: ";
                cin >> initial;
                cout << "输入加速度: ";
                cin >> acceleration;
                cout << "输入运动时间: ";
                cin >> time;
                system("CLS");
                velocity_menu();
                cout << setw(10)<<"末速度: " << setw(6)<<velocity(initial,acceleration,time);
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '5':{
                system("CLS");
                float mass_value, speedlight_value;
                cout << fixed;
                cout << setprecision(2);
                mass_menu();
                cout << "输入质量: ";
                cin >> mass_value;
                cout << "输入光速取值: ";
                cin >> speedlight_value;
                system("CLS");
                mass_menu();
                cout << setw(10)<<"能量: " << setw(6)<<mass_en(mass_value, speedlight_value);
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '6':{
                system("CLS");
                float number, base_per;
                cout << fixed;
                cout << setprecision(2);
                percentage_menu();
                cout << "输入当前值: ";
                cin >> number;
                cout << "输入基准值: ";
                cin >> base_per;
                system("CLS");
                percentage_menu();
                cout << setw(10)<<"占比: " << setw(6)<<percentage(number, base_per) << "%";
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }

            case '7':{
                system("CLS");
                cout << fixed;
                cout << setprecision(2);
                cout << "---------------------------\n";
                cout << "            成员名单         \n";
                cout << "Nattapon Sripradub M.4/1 No.14\n";
                cout << "Natnicha  Nuangsupthawee M.4/1 No.22\n";
                cout << "Panicha Pornpattarapon M.4/1 No.24\n";
                cout << "\n----------------------";
                cout << "\n按任意键返回主菜单";
                getch();
                break;
            }
           
        }
    }while(choosechoice!= 'X' && choosechoice!= 'x');

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:24:04