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

CS50三角形合法性判断程序仅输出无效结果的问题排查

问题分析与解决

首先明确三角形有效性的核心逻辑:必须同时满足三个条件:a+b>c、a+c>b、b+c>a,只要有一个条件不满足,就是无效三角形。

你遇到的情况本质是:原来代码里的第二个return false逻辑写反了,导致合法的三角形被提前判定为无效;当你把这个return false换成printf("DEBUG")后,错误的提前返回被取消,函数会执行到最后的return true,所以所有输入都显示有效。

常见错误排查方向

  • 条件判断写反:比如本该判断if (a + c <= b)才返回false,结果写成了if (a + c > b)就返回false,这会直接把合法的三角形判定为无效。
  • 逻辑运算符误用:比如把需要用||(或)的场景写成了&&(与),或者反过来。举个典型的错误结构:
    bool valid_triangle(int a, int b, int c) {
        if (a + b <= c) return false;
        if (a + c > b) return false; // 这里条件写反了,原本应该是<=
        if (b + c <= a) return false;
        return true;
    }
    
    这种情况下,只要a+c>b(合法情况)就会直接返回false,自然所有输入都显示无效;去掉这个return后,函数会走到最后return true,所以全显示有效。
  • 输入值异常:虽然CS50练习题一般会保证输入正整数,但也可以检查下是否有读入错误,比如输入的数值有没有被正确存储到变量里。

快速验证方法

你可以在函数里加打印,直接输出三个条件的结果:

bool valid_triangle(int a, int b, int c) {
    printf("a+b>c: %d | a+c>b: %d | b+c>a: %d\n", a+b>c, a+c>b, b+c>a);
    if (a + b <= c) return false;
    if (a + c <= b) {
        printf("DEBUG\n");
        // 注释掉原来的return false
    }
    if (b + c <= a) return false;
    return true;
}

测试几个典型用例:比如3、4、5(有效),1、2、3(无效),看打印的条件结果和程序输出是否匹配,就能立刻定位哪个条件出了问题。

总结:问题根源就是第二个return false的条件判断逻辑错误,错误拦截了合法的三角形;去掉这个return后,错误拦截消失,函数正常返回true,所以所有情况都显示有效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:11