如何让C++程序通过输入的多边形名称自动获取对应边数计算周长
正多边形周长计算优化实现
你需要的自动匹配边数功能用if-else条件判断完全可以实现,核心逻辑是拿到用户输入的多边形名称后,和预设的常见多边形名称做匹配,匹配成功就直接给边数变量赋值,不需要用户手动输入边数。
优化后完整代码
#include<iostream> #include<string> // 注意加<string>头文件,部分编译器string操作需要显式引入 using namespace std; int main(){ string polygon; int ns; //ns是多边形边数 float ls,perimeter; //ls是单边长,单位毫米 cout<<"Program to calculate the perimeter of a regular polygon."; cout<<"\n********************************************************"; cout<<"\n\nEnter the name of the polygon: "; cin>>polygon; // 新增:根据多边形名称自动匹配边数 if (polygon == "triangle" || polygon == "Triangle") { ns = 3; } else if (polygon == "quadrilateral" || polygon == "Quadrilateral" || polygon == "square" || polygon == "Square") { ns = 4; } else if (polygon == "pentagon" || polygon == "Pentagon") { ns = 5; } else if (polygon == "hexagon" || polygon == "Hexagon") { ns = 6; } else if (polygon == "heptagon" || polygon == "Heptagon") { ns = 7; } else if (polygon == "octagon" || polygon == "Octagon") { ns = 8; } else { cout << "\n错误:未识别的多边形名称,请检查拼写后重试"; return 1; // 匹配失败直接退出程序 } cout<<"\nEnter the length of the side in millimeters: "; cin>>ls; //周长计算逻辑不变 perimeter=ns*ls; cout<<"\nThe perimeter of a " <<polygon<< " with length " <<ls<< " millimeters is "<<perimeter; return 0; }
核心改动说明
- 删掉了原来要求用户手动输入边数
ns的代码行,改为通过条件判断自动赋值 - 加入了大小写兼容逻辑,用户输入全小写或者首字母大写的多边形名称都可以正常匹配
- 新增了未知名称的错误提示,避免程序拿到无效的边数后计算出错误结果
- 如果需要支持更多多边形,只要按照现有格式新增
else if分支即可,不需要修改其他逻辑
如果你不想写太多if分支,后续熟悉C++语法后也可以用std::map<std::string, int>来存储名称和边数的映射关系,匹配时代码会更简洁。
内容的提问来源于stack exchange,提问作者krankenhaus
相关产品推荐
相关产品推荐

