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

如何使用bool数据类型?三角形合法性判断代码编译问题求助

编译错误排查:bool函数判断三角形的输出问题

我定义了返回true或false的bool类型函数valid_triangle,想根据它的返回值用printf输出判断结果。已经获取了用户输入的三个正数float类型边长,但用if条件语句判断bool值时代码无法编译,相关代码如下:

bool valid_triangle(float x, float y, float z);
int main(void)
{
    float x;
    float y;
    float z;
    do
    {
        x = get_float("Enter a length: ");
    }
    while(x <= 0);
    do
    {
        y = get_float("Enter other length: ");
    }
    while(y <= 0);
    do
    {
        z = get_float("The last one: ");
    }
    while(z <= 0);
}
if(valid_triangle = 1)
{
    printf("It's a triangle");
}
bool valid_triangle(float x, float y, float z)
{
    if(x <= 0 || y <= 0 || z <= 0)
    {
        return false;
    }
    if((x + y <= z) || (x + z <= y) || (y + z <= x))
    {
        return false;
    }
    return true;
}

编译错误截图:
编译错误截图

关键错误点及修正方案

  • 代码位置错误:if判断块写在了main函数外面,C语言里所有执行语句必须放在函数内部,把这个if块移到main函数的闭合大括号}之前。
  • 函数调用错误:if(valid_triangle = 1)里用了赋值符号=,不是判断相等的==,而且没传入参数。正确写法是调用valid_triangle(x, y, z),直接用返回的bool值做判断(不需要和1比较,bool值本身可直接作为条件)。
  • 头文件缺失:使用bool、true、false必须包含<stdbool.h>头文件,否则编译器不认这些关键字。
  • 冗余判断(可选优化):valid_triangle里的边长<=0判断可以去掉,因为main里已经确保输入是正数了,保留也可以做双重校验。

修正后的完整代码

#include <stdio.h>
#include <stdbool.h>
// 确保get_float函数已声明或定义
float get_float(const char* prompt);

bool valid_triangle(float x, float y, float z);

int main(void)
{
    float x;
    float y;
    float z;
    do
    {
        x = get_float("Enter a length: ");
    }
    while(x <= 0);
    do
    {
        y = get_float("Enter other length: ");
    }
    while(y <= 0);
    do
    {
        z = get_float("The last one: ");
    }
    while(z <= 0);

    // 正确调用函数并判断结果
    if(valid_triangle(x, y, z))
    {
        printf("It's a triangle\n");
    }
    else
    {
        printf("It's not a triangle\n");
    }
    return 0;
}

bool valid_triangle(float x, float y, float z)
{
    // main已确保边长为正,可省略下面的判断
    // if(x <= 0 || y <= 0 || z <= 0)
    // {
    //     return false;
    // }
    if((x + y <= z) || (x + z <= y) || (y + z <= x))
    {
        return false;
    }
    return true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:55:25