You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

关键修正点说明

  1. 修复变量拼写错误:将legnth_b、legnth_c改为length_b、length_c,确保传入函数的是用户输入的正确边长值。
  2. 正确调用判断函数:通过valid_triangle(length_a, length_b, length_c)调用函数并传入三个边长参数,获取返回的布尔值后再进行条件判断。
  3. 优化逻辑严谨性:将三边关系判断中的<改为<=,符合三角形的严格定义(任意两边之和必须严格大于第三边,等于的话是退化三角形,不构成有效三角形)。

内容的提问来源于stack exchange,提问作者Alec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:40:28