三角形类型判断函数if语句失效问题求助
问题分析与代码修正
一、核心问题拆解
1. 嵌套函数违反C语法
C标准不允许在函数内部定义另一个函数,你把TriangleType写在main函数里,会直接导致编译错误,这就是在线编译器无响应的主要原因。
2. 未输出返回值
你调用了TriangleType但没打印结果,自然看不到返回值,误以为返回0。
3. 逻辑漏洞
- 原等腰判断用了整数除法,比如
(180-angle2)/2,如果180-angle2是奇数,会被截断,可能导致误判。 - 等腰直角的判断条件不够严谨,且原逻辑把直角和等腰的判断混在一起,容易漏判。
- 没检查单个角为0的情况,unsigned类型允许输入0,但0角构不成合法三角形。
二、修正后的完整代码
#include <stdio.h> int TriangleType(unsigned angle1, unsigned angle2) { // 先校验角度合法性:单个角不能为0,且前两个角之和必须小于180(保证第三个角为正) if (angle1 == 0 || angle2 == 0 || angle1 + angle2 >= 180) { return 0; } unsigned angle3 = 180 - angle1 - angle2; // 分别标记直角、等腰状态 int is_right = (angle1 == 90) || (angle2 == 90) || (angle3 == 90); int is_isosceles = (angle1 == angle2) || (angle1 == angle3) || (angle2 == angle3); // 根据状态返回对应值 if (is_right && is_isosceles) { return 3; } else if (is_right) { return 1; } else if (is_isosceles) { return 2; } else { return 0; } } int main() { // 测试示例:调用函数并打印结果 int res = TriangleType(110, 111); printf("测试1返回值:%d\n", res); res = TriangleType(90, 45); printf("测试2返回值:%d\n", res); res = TriangleType(60, 60); printf("测试3返回值:%d\n", res); res = TriangleType(30, 60); printf("测试4返回值:%d\n", res); return 0; }
三、修正说明
- 把
TriangleType移到main外部,符合C语言语法要求,解决编译错误。 - 引入
stdio.h头文件,用printf打印返回值,能直观看到结果。 - 重构逻辑:
- 先计算第三个角
angle3,避免重复计算,逻辑更清晰。 - 拆分直角和等腰的判断条件,再组合判断返回值,彻底避免原逻辑的漏洞。
- 补充单个角为0的合法性校验,确保只处理有效三角形。
- 先计算第三个角
内容的提问来源于stack exchange,提问作者Elad St
相关产品推荐
相关产品推荐

