如何用switch语句通过角度判断三角形是否有效?代码实现遇阻求助
解决用switch语句判断三角形角度有效性的问题
首先得说,你当前的代码逻辑有几个关键问题,导致完全没法实现需求:
- 变量
op既没初始化也没从输入获取值,switch根本不知道要执行哪个分支 - 用
'+'作为case完全和三角形有效性判断不沾边,这个逻辑完全错位了 - 只判断了三个角的和是否为180,但忽略了每个角必须大于0这个必要条件(总不能有0度或者负角度的三角形吧)
要想用switch实现这个判断,核心是把「三角形是否有效」这个布尔判断转换成switch能接受的整数类型条件(因为C++的switch只支持整数/枚举/字符这类离散值类型)。我们可以先计算一个状态标识,再用switch处理不同状态:
修正后的基础实现代码
#include <iostream> using namespace std; int main() { float x, y, z; cout << "Enter the three angles : \n"; cin >> x >> y >> z; // 先判断三角形有效的两个必要条件:每个角>0,且三个角和为180 int isValid = (x > 0 && y > 0 && z > 0 && (x + y + z == 180)) ? 1 : 0; switch (isValid) { case 1: cout << "A triangle is valid !! \n"; break; default: cout << "A triangle is Not valid !! \n"; break; } system("pause"); return 0; }
代码解释
- 移除了没用的
op变量,我们不需要它来实现判断逻辑 - 用三元运算符生成
isValid状态值:如果满足两个核心条件(所有角大于0、角度和为180)就设为1,否则为0 - switch根据
isValid的值分支:case 1对应有效三角形,default对应无效情况
如果你想更细分无效的具体原因(比如是存在非正角度,还是角度和不对),还可以扩展状态值,让switch处理更细致的分支:
#include <iostream> using namespace std; int main() { float x, y, z; cout << "Enter the three angles : \n"; cin >> x >> y >> z; int status; if (x <= 0 || y <= 0 || z <= 0) { status = 2; // 存在非正角度的情况 } else if (x + y + z != 180) { status = 3; // 角度和不为180的情况 } else { status = 1; // 有效三角形 } switch (status) { case 1: cout << "A triangle is valid !! \n"; break; case 2: cout << "Invalid: Angles must be greater than 0 !! \n"; break; case 3: cout << "Invalid: Sum of angles is not 180 degrees !! \n"; break; default: cout << "Unexpected error !! \n"; break; } system("pause"); return 0; }
这样switch就能清晰处理不同的判断情况啦~
内容的提问来源于stack exchange,提问作者mazen mohamed
相关产品推荐
相关产品推荐

