CS50有效三角形判断程序报错:指针与整数比较问题求助
解决三角形有效性判断程序的编译错误及逻辑修正
编译错误原因
你遇到的comparison between pointer and integer错误,是因为在main函数中直接将**函数名valid_triangle**与布尔值true/false比较:
if(valid_triangle == true)
函数名本身代表的是函数的内存地址(指针类型),而true/false是整数类型,两者类型不兼容,因此触发编译错误。
另外代码中还存在变量名拼写错误:legnth_b和legnth_c应为length_b和length_c,这会导致未初始化的垃圾值被传入判断函数,引发逻辑错误。
修正后的完整代码
#include <cs50.h> #include <stdio.h> #include <stdbool.h> bool valid_triangle(int length_a, int length_b, int length_c); int main(void) { int length_a = get_int("side a: "); int length_b = get_int("side b: "); int length_c = get_int("side c: "); // 正确调用函数并传入参数,用返回值判断 bool is_valid = valid_triangle(length_a, length_b, length_c); if(is_valid) { printf("This is a triangle\n"); } else { printf("This is not a triangle\n"); } } bool valid_triangle(int length_a, int length_b, int length_c) { // 先判断边长是否为正 if(length_a <= 0 || length_b <= 0 || length_c <= 0) { return false; } // 三角形三边关系:任意两边之和大于第三边 if(length_a + length_b <= length_c || length_a + length_c <= length_b || length_b + length_c <= length_a) { return false; } return true; }
关键修正点说明
- 修复变量拼写错误:将
legnth_b、legnth_c改为length_b、length_c,确保传入函数的是用户输入的正确边长值。 - 正确调用判断函数:通过
valid_triangle(length_a, length_b, length_c)调用函数并传入三个边长参数,获取返回的布尔值后再进行条件判断。 - 优化逻辑严谨性:将三边关系判断中的
<改为<=,符合三角形的严格定义(任意两边之和必须严格大于第三边,等于的话是退化三角形,不构成有效三角形)。
内容的提问来源于stack exchange,提问作者Alec
相关产品推荐
相关产品推荐

