C中的布尔函数没有被调用,我不明白为什么[closed]

yeotifhr  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(113)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
社区正在审查是否从昨天开始重新讨论这个问题。
Improve this question
我在做一个简单的cs50课程练习来验证一个三角形。我创建了一个函数valid_triangle并将其原型化,但是当我使用调试器时,我的函数(valid_triangle)没有被使用,我不明白为什么。我希望得到任何帮助。谢谢。

    • edit:经过简单的回顾,实际上我的函数正在被调用,但无论输入如何总是返回true。**我尝试使用50,1,1,它应该返回false,但它返回了true。

可能功能不对...

#include <cs50.h>
#include <stdio.h>

//number of sides of the triangle
const int N = 3;

//validate triangle
bool valid_triangle(int side[]);

int main(void)
{
    //get sides
    int side[N];
    for (int i = 0; i < N; i++)
    {
        do
        {
            side[i] = get_int("side lenght: ");
        }
        while(side[i] < 0);
    }

    //print result
    if (valid_triangle(side) == true)
    {
        printf("This is a valid triangle\n");
    }
    else
    {
        printf("This is NOT a valid triangle\n");
    }
}

 //validade triangle
bool valid_triangle(int side[])
 {
    if (side[0] < (side[1] + side[2]) || side[1] < (side[0] + side[2]) || side[2] < (side[1] + side[0]))
    {
        return true;
    }
    else
    {
        return false;
    }
 }

它编译
我尝试将"if(valid_triangle(side)== true)"的语法更改为"if(valid_triangle(side [])== true)"或"if(valid_triangle(int side [])== true)",但没有成功。

3yhwsihp

3yhwsihp1#

我试用了你的代码,和你一样,在测试中得到了不正确的结果。实际上,你的侧面比较应该检查"大于"而不是"小于"。
以下声明:

if (side[0] < (side[1] + side[2]) || side[1] < (side[0] + side[2]) || side[2] < (side[1] + side[0]))

应为:

if (side[0] > (side[1] + side[2]) || side[1] > (side[0] + side[2]) || side[2] > (side[1] + side[0]))

你最有可能检查的是任何一边不大于其他两边的总和。
当我修改测试时,下面是一些示例终端输出。

@Vera:~/C_Programs/Console/TriangleTest/bin/Release$ ./TriangleTest 
Side length: 3
Side length: 4
Side length: 5
This is a valid triangle
@Vera:~/C_Programs/Console/TriangleTest/bin/Release$ ./TriangleTest 
Side length: 2
Side length: 3
Side length: 7
This is NOT a valid triangle

尝试一下,看看它是否符合你项目的精神。

相关问题