为什么我的程序不打印 IF 函数?

Why does my program not print the IF function?

提问人:Zane 提问时间:10/12/2023 最后编辑:Zane 更新时间:10/12/2023 访问量:96

问:

这是 CS50 中的练习题,用户应输入 3 个维度。如果两边的长度之和大于第三边的长度,则应打印有效文本,如果没有,则在主文本中打印无效文本。

//validate whether the user's input dimensions can make a triangle
#include <cs50.h>
#include <stdio.h>

bool valid_triangle(float a, float b, float c);

int main(void)
{

//ask user for input
    float a = get_float("Enter the length for one side of a triangle: ");
    float b = get_float("Enter the length for the second side of a triangle: ");
    float c = get_float("Enter the length for the third side of a triangle: ");

//if valid input
    if (valid_triangle(a, b, c))
    {
        printf("Well done. The dimensions %.2f, %.2f, and %.2f make a triangle!\n", a, b, c);
    }

//if invalid input
    else
    {
        printf("Please try again. These dimensions do not make a triangle.\n");
    }
}

//check user input
bool valid_triangle(float a, float b, float c)
{
    if ((a <= 0) || (b <= 0) || (c <= 0))
    {
        return false;
    }

    if ((a + b <= c) || (a + c <= b) || (b + c <= a))
    {
        return false;
    }

    return true;
}

我的程序似乎卡住了,只打印无效的响应,我无法缩小原因范围。我的工具不起作用,所以我尝试通过将 bool 函数中的第二个换成 .这实际上有效,并导致程序在主函数中打印我的有效响应。我不知道为什么,但需要注意的是,它只会打印有效的响应。我觉得这个程序是 98%,但在它达到 100% 的过程中有一些小东西。debug50return false;printf("DEBUG");

C IF-语句 CS50

评论

6赞 Scott Hunter 10/12/2023
你用什么值来测试 , & ?abc
0赞 Weather Vane 10/12/2023
当我输入 3、4 和 5 时,它响应“干得好......”
0赞 Retired Ninja 10/12/2023
对于各种硬编码值,您的算法在我看来是正确的。godbolt.org/z/PxKGh8hGo当你使用它运行你的程序时,会说什么?check50
1赞 Jabberwocky 10/12/2023
编辑并显示一些输入示例以及预期输出与实际输出。
2赞 Fabio says Reinstate Monica 10/12/2023
尝试在函数后面立即打印变量的值。然后尝试注释掉对硬编码值的调用和调用,比如,看看会发生什么。这将使它运行得更快。并向函数添加更多内容,每个 return 语句一个,就在它上面,比如 和get_floatget_floatvalid_triangleif (valid_triangle(3, 4, 5))printfvalid_triangleprintf("One side is negative");printf("One side is too long");

答:

1赞 John Doe 10/12/2023 #1

I don't know why though and caveat was that it would only print the valid response.看到这句话,我觉得有理解问题。程序不应始终(正确)打印成功的答案,而应仅打印某些值。例如,正如其他人在评论中所说的那样,应该但应该.我怀疑您正在使用正确返回的值,但您期望它们返回.1 1 1return true1 1 3return falsefalsetrue

swapping the second return false; in the bool function out for printf("DEBUG");. This actually worked and resulted in the program printing my valid response in the main function.意味着您没有使用可以消除输入中潜在问题的值。0negative

如果三角形也可以用一条线“过冲”,那么其他三角形是这样的:

\
 \
 |\
 | \
 |  \
 |___\

你需要把你的改成里面,但程序将始终是正的非零数(就像你说的),但我真的不认为这是练习题要求你做的。||&&((a + b <= c) || (a + c <= b) || (b + c <= a))return true

评论

1赞 Zane 10/13/2023
谢谢大家。似乎它的工作方式与今天完全相同。这听起来可能是不可能的,但昨天它根本行不通。也许我累了,把数字放错了。尽管如此,你所有的解释都很棒,很有用。对于多余的问题,我们深表歉意。