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

