【问题标题】:CS50 valid Triangle Problem - not compilingCS50 有效三角问题 - 未编译
【发布时间】:2021-11-18 02:01:56
【问题描述】:

我是编程新手,我正在做 CS50。我在三角形问题(第 2 周 - 数组 - 函数)上的主动性被卡住了。

这是我的代码:

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

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

int main(void)
{
    float x = get_float("Side 1: ");
    float y = get_float("Side 2: ");
    float z = get_float("Side 3: ");

    if (x <= 0 || y <=0 || z <=0)
    {
        return false;
    }

    if (valid_triangle == true)
    {
        printf("This is a valid triangle");
    }
    else
    {
        printf("This is not a valid triangle");
    }
}


bool valid_triangle(float x, float y, float z)
{
    if ((x + y <= z) || (x + z <= y) || (y + z <= x))
    {
        return false;
    }
    else
    {
        return true;
    }
}

我收到了错误:

comparison between pointer and integer ('bool (*)(float, float, float)' and 'int') [-Werror,-Wpointer-integer-compare]
    if (valid_triangle == true)
        ~~~~~~~~~~~~~~ ^  ~~~~

谁能帮我看看我做错了什么?

【问题讨论】:

  • 你必须用参数调用valid_triangle函数。
  • if (valid_triangle(x, y, z))
  • 为什么这个标签是arrays?程序中的任何地方都没有数组。
  • 旁注:从main返回false与返回0相同,0表示成功。 See more about the return value in this question.
  • if(valid_triangle == true)if(&amp;valid_triangle == 1)一样,获取函数的地址,可能不会是1。你要调用函数。

标签: c function cs50 triangle


【解决方案1】:

感谢@Mark Benningfield

真的只是缺少在 main 中调用函数...

这样,我只是在main上添加了

bool isValid = valid_triangle(x, y, z);

调用函数, 并改变了

    if (isValid == true)
    {
        printf("This is a valid triangle\n");
    }
    else
    {
        printf("This is not a valid triangle\n");
    }

【讨论】:

  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
  • 关于:if (isValid == true) 任何非零值计算为 TRUE 也只有零计算为 FALSE 因此,1) TRUE 必须定义为 1,但并非总是如此(它可能被定义为 !0 或任何其他非 0 值。因此最好不要假设 TRUE 为 1。因此,最好不要将布尔值与 TRUE/ 建议使用:!FALSE
  • @user3629249 在 C 中,!FALSE 始终是 !01isValidbool valid_triangle() 设置,因此,在这种情况下,它要么是真要么是假。但是,我通常同意添加冗余的== true 是一个糟糕的编码约定,因为如果一个值是真实的但不完全是 1,它的评估结果为 false,这是一件很难解释和调试的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2020-09-15
  • 2020-08-22
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多