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

webghufk  于 2023-10-15  发布在  其他
关注(0)|答案(1)|浏览(198)

这是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;
}

我的程序似乎只能打印无效的响应,我不能缩小原因。我的debug50工具不起作用,所以我尝试自己分解它,将bool函数中的第二个return false;交换为printf("DEBUG");。这实际上起作用了,并导致程序在main函数中打印我的有效响应。我不知道为什么,但警告是,它将 * 只 * 打印有效的响应。我觉得这个程序是在98%,但有一些小的方式,它达到100%。

bq3bfh9z

bq3bfh9z1#

I don't know why though and caveat was that it would only print the valid response.看到这一行,我认为有一个理解问题。程序不应该总是(正确地)打印成功的答案,而应该只打印某些值。例如,正如其他人在评论中所说的那样,1 1 1应该是return true,但1 1 3应该是return false。我怀疑你正在使用正确返回false的值,但你希望它们返回true
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为积极的非零数字(就像你说的),但我真的不认为这是练习题要求你做的。

相关问题