CS50有效三角形判断代码编译报错问题求助
问题原因
- 核心错误是没有正确调用自定义函数:你在
if判断中直接写函数名valid_triangle,此时它代表函数本身的内存地址(属于指针类型),和布尔值true(本质是整数1)做比较,不符合C语言语法规范,因此触发编译报错。 - 次要可优化点:
main函数中边长校验不通过时直接return false,既没有给用户输出错误提示,也不符合main函数返回值规范(main函数的返回值为int类型,程序异常退出应返回非0值,正常结束返回0)。
修复方案
- 调用
valid_triangle时必须传入三个边长参数,即valid_triangle(x, y, z),拿到函数执行后返回的布尔值再做判断。 - 补充边长非法的提示信息,修正
main函数的返回值。
修复后完整代码
#include <cs50.h> #include <stdio.h> #include <stdbool.h> bool valid_triangle(float x, float y, float z); int main(void) { float x = get_float("Side 1: "); float y = get_float("Side 2: "); float z = get_float("Side 3: "); if (x <= 0 || y <= 0 || z <= 0) { printf("边长不能为0或负数\n"); return 1; } if (valid_triangle(x, y, z)) { printf("This is a valid triangle\n"); } else { printf("This is not a valid triangle\n"); } return 0; } bool valid_triangle(float x, float y, float z) { if ((x + y <= z) || (x + z <= y) || (y + z <= x)) { return false; } else { return true; } }
内容的提问来源于stack exchange,提问作者Piazzones
相关产品推荐
相关产品推荐

